微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在开发一个J2ME客户端,必须使用HTTP将文件上传到Servlet.

使用Apache Commons FileUpload覆盖了servlet部分

protected void doPost(HttpServletRequest request,HttpServletResponse response) 
{       

    ServletFileUpload upload = new ServletFileUpload();
    upload.setSizeMax(1000000);

    File fileItems = upload.parseRequest(request);

    // Process the uploaded items
    Iterator iter = fileItems.iterator();
    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
        File file = new File("\files\\"+item.getName());
        item.write(file);
    }
}

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这个例子,

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);

multipartentity entity = new multipartentity();
entity.addPart("file",new FileBody(file));
post.setEntity(entity);

HttpResponse response = client.execute(post);
// ...

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

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

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

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

原文地址:https://www.jb51.cc/java/124574.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐