Java Http客户端通过POST上传文件

前端之家收集整理的这篇文章主要介绍了Java Http客户端通过POST上传文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个J2ME客户端,必须使用HTTP将文件上传到Servlet.

使用Apache Commons FileUpload覆盖了servlet部分

  1. protected void doPost(HttpServletRequest request,HttpServletResponse response)
  2. {
  3.  
  4. ServletFileUpload upload = new ServletFileUpload();
  5. upload.setSizeMax(1000000);
  6.  
  7. File fileItems = upload.parseRequest(request);
  8.  
  9. // Process the uploaded items
  10. Iterator iter = fileItems.iterator();
  11. while (iter.hasNext()) {
  12. FileItem item = (FileItem) iter.next();
  13. File file = new File("\files\\"+item.getName());
  14. item.write(file);
  15. }
  16. }

Commons Upload似乎只能上传multipart文件,但是没有应用程序/ octect-stream.

但是对于客户端,没有Multipart类,在这种情况下,也不可能使用任何HttpClient库.

其他选项可能是使用HTTP Chunk上传,但是我没有找到一个明确的例子来说明如何实现这一点,特别是在servlet方面.

我的选择是:
– 实现一个用于http chunk上传的servlet
– 实现用于http多部分创建的原始客户端

我不知道如何执行上述任何选项.
任何建议?

解决方法

通过HTTP发送文件应该是使用multipart / form-data编码进行的.您的servlet部分很好,因为它已经使用 Apache Commons FileUpload来解析多部分/表单数据请求.

然而,您的客户端部分显然不正确,因为您似乎将文件内容原始的写入请求主体.您需要确保您的客户端发送正确的多部分/表单数据请求.如何做到这一点取决于您用来发送HTTP请求的API.如果它是纯朴的java.net.URLConnection,那么你可以在this answer底部找到一个具体的例子.如果你使用Apache HttpComponents Client这个例子,

  1. HttpClient client = new DefaultHttpClient();
  2. HttpPost post = new HttpPost(url);
  3.  
  4. MultipartEntity entity = new MultipartEntity();
  5. entity.addPart("file",new FileBody(file));
  6. post.setEntity(entity);
  7.  
  8. HttpResponse response = client.execute(post);
  9. // ...

与具体问题无关,您的服务器端代码有一个错误

  1. File file = new File("\files\\"+item.getName());
  2. item.write(file);

这可能会覆盖任何以前上传的同名文件.我建议使用File#createTempFile()替代.

  1. String name = FilenameUtils.getBaseName(item.getName());
  2. String ext = FilenameUtils.getExtension(item.getName());
  3. File file = File.createTempFile(name + "_","." + ext,new File("/files"));
  4. item.write(file);

猜你在找的Java相关文章