Problème avec la configuration de l'en-tête “Content-Type” téléchargement de fichier avec HttpClient4

Je suis en train de télécharger un fichier (ou plusieurs fichiers) à ma servlet, qui est à l'aide d'Apache de téléchargement de fichier et post-ed fichiers.

Tout va bien et que le fichier est envoyé et reçu, lorsque j'utilise le code suivant.

DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://myservice.com/servlet");

MultipartEntity entity2 = new MultipartEntity();
FileBody fileBody = new FileBody(new File("C:/docOut.pdf"));
entity2.addPart("file", fileBody);
post.setEntity(entity2);

HttpResponse httpResponse = client.execute(post);
System.out.println(EntityUtils.toString(httpResponse.getEntity()));

Mais quand j'essaie de régler mon propre "Content-Type" recommandé par l'un (ou l'une seulement accepté avec Apache chargement d'un fichier de bibliothèque) avec téléchargement du fichier:

post.addHeader("Content-Type", "multipart/form-data");

Ma servlet n'y a pas de fichiers et déclenche une exception:

org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:931)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at com.myservice.server.filerep.action.FileUploadFormAction.execute(FileUploadFormAction.java:54)
at com.myservice.server.filerep.web.FileRepServlet.doGet(FileRepServlet.java:34)
at com.myservice.server.filerep.web.FileRepServlet.doPost(FileRepServlet.java:41)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

Je suis conscient que les requêtes POST avec le téléchargement de fichiers ne doivent pas contenir de frontière "éléments" à la demande afin de déterminer l'ordre de téléchargé octet morceaux, mais j'ai pensé HttpClient va ajouter toutes les informations nécessaires à ma demande (similaire que lorsque je n'ai pas de spécifier le type de contenu).

Mes questions sont:

  1. Pourquoi ajouter "Content-Type" saut de ma demande? Ne devrait pas HttpClient ajouter des éléments de frontière pour le type de contenu défini par moi?

  2. Dois-je définir explicitement "Content-Type" à ma demande ou laissez la bibliothèque manipuler?

  3. Si je peux mettre Content-Type explicitement pourrait vous fournir un extrait de code?

  4. Si je peux explicitement défini le Type de Contenu d'pourquoi devrais-je utiliser et préfèrent "multipart/form-data", "application/x-www-form-urlencoded" quand il s'agit de l'Affichage de certaines formes?

PS: j'ai trouvé en quelque sorte liés à des questions, mais ne pas répondre à mon problème:

ContentType problème avec les communes-télécharger et httpcomponent client

Comment puis-je Voir le contenu d'un MultipartForm demande?

OriginalL'auteur ljader | 2011-06-02