从POST请求中读取MultipartContent

时间:2013-01-25 20:02:57

标签: java servlets file-upload apache-commons

  

可能重复:
  How to upload files to server using JSP/Servlet?

我正在实现一个与resumable.js一起使用的文件上载servlet

每次我尝试读取文件时,我都会得到一个NoSuchElement异常或一个NumberFormatException,其中包含我正在阅读的文件中的字符串。我确定我在某个地方打了一个打嗝,但似乎无法告诉

这是我用来读取请求和写入文件

的片段
if(ServletFileUpload.isMultipartContent(request)){
            DiskFileItemFactory factory = new DiskFileItemFactory();
            factory.setRepository(new File(temp_dir));
            ServletFileUpload upload = new ServletFileUpload(factory);

            Iterator<FileItem> iter = upload.parseRequest(request).iterator();
            FileItem item = iter.next();
            OutputStream out;

            try {

                out = new FileOutputStream(new File(dest_dir));
                IOUtils.copy(item.getInputStream(), out);
                logger.debug("Wrote file " + resumableIdentifier + " with chunk number "
                        + resumableChunkNumber + " to " + temp_dir);

            } catch (FileNotFoundException fnfe) {

                fnfe.printStackTrace();

            }
        }

我做错了什么让代码实际读取并解释文件的内容?

1 个答案:

答案 0 :(得分:2)

您必须遍历FileItems。 就在这一行之后:

Iterator<FileItem> iter = upload.parseRequest(request).iterator();

你应该有这样的东西:

File dir = new File(dest_dir);
if (!dir.isDirectory()) dir.mkdirs();
while(iter.hasNext()) {
    FileItem item = iter.next();

另外,请不要忘记关闭每个文件项的输出流。

out = new FileOutputStream(new File(dir, item.getName()));
IOUtils.copy(item.getInputStream(), out);
out.close();