Android将servlet图像上传保存在服务器上

时间:2011-03-05 17:01:38

标签: java android servlets file-upload

我创建了一个servlet,它接受来自我的android app的图像。我在我的servlet上接收字节,但是,我希望能够在服务器上保存带有原始名称的图像。我怎么做。我不想使用apache commons。还有其他解决方案对我有用吗?

感谢

1 个答案:

答案 0 :(得分:5)

MultipartEntity类Android内置multipart/form-data的帮助下,以HttpClient API请求发送。

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://example.com/uploadservlet");
MultipartEntity entity = new MultipartEntity();
entity.addPart("fieldname", new InputStreamBody(fileContent, fileContentType, fileName));
httpPost.setEntity(entity);
HttpResponse servletResponse = httpClient.execute(httpPost);

然后在servlet的doPost()方法中,使用Apache Commons FileUpload提取部分。

try {
    List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
    for (FileItem item : items) {
        if (item.getFieldName().equals("fieldname")) {
            String fileName = FilenameUtils.getName(item.getName());
            String fileContentType = item.getContentType();
            InputStream fileContent = item.getInputStream();
            // ... (do your job here)
        }
    }
} catch (FileUploadException e) {
    throw new ServletException("Cannot parse multipart request.", e);
}

  

我不想使用apache commons

除非你使用支持multipart/form-data {8}的commons-fileupload.jar请求的Servlet 3.0,否则你需要根据HttpServletRequest#getParts()自行重新发明一个multipart / form-data解析器。它只能长期咬你。硬。我真的没有看到你为什么不使用它的任何理由。这是无知吗?这至少不是那么难。只需将commons-io.jar/WEB-INF/lib放入{{1}}文件夹即可,并使用上面的示例。而已。你可以找到RFC2388另一个例子。