带有commons-upload和httpcomponent客户端的ContentType问题

时间:2010-06-10 13:13:40

标签: java file-upload content-type httpclient

我正在尝试开发一个使用httpcomponents上传文件的Http客户端:

HttpPost httppost = new HttpPost(myURL);
httppost.setHeader("Content-type",
       "multipart/form-data; boundary=stackoverflow");
httppost.setHeader("Accept", "text/xml");
MultipartEntity reqEntity = new multipartEntity(
       HttpMultipartMode.BROWSER_COMPATIBLE,"stackoverflow",
       Charset.forName("UTF-8"));
FileBody bin = new FileBody(myFile);
reqEntity.addPart("File", bin);
httppost.setEntity(reqEntity);
HttpResponse response = client.execute(httppost);

在服务器端,有一个

doPost(HttpServletRequest request, HttpServletResponse response)

解析请求的方法:

FileItemFactory factory = new DiskFileItemFactory(204800, new File(
                    uploadDirectory));
ServletFileUpload fileUpload = new ServletFileUpload(factory);
try {
     List<FileItem> items = fileUpload.parseRequest(request);
     Iterator<FileItem> itemIterator = items.iterator();
     while (itemIterator.hasNext()) {
          FileItem item = itemIterator.next();
           ....

它运行正常,但问题是我的FileItem的Content-type为null,稍后我有一个NullPointerException。但是,当我在客户端执行bin.getContentType()时,我得到“text / xml”。

有人知道此内容类型何时丢失以及如何解决该问题?

1 个答案:

答案 0 :(得分:2)

您使用的是错误的模式。在BROWSER_COMPATIBLE模式下,内容类型不会发送到服务器。您需要使用STRICT模式发送content_type。

但是,STRICT可能不适合您,因为某些Web服务器不喜欢它。

FileBody的默认内容类型是application / octet-stream。你可以像这样改变它,

  FileBody bin = new FileBody(new File(myFile), "text/html");