如何通过表单上传文件并让Java将其作为InputStream处理? [重复]

    这个问题在这里已有答案:                           如何使用JSP / Servlet将文件上传到服务器?                                      12个答案                                    
已邀请:
如果还没有完成,请安装像Apache Tomcat这样的webserver / servletcontainer。 如果你选择Tomcat 6.x,那么使用Apache Commons FileUpload将上传的文件作为
InputStream
。如果选择Tomcat 7.x(Servlet 3.0),则使用
HttpServletRequest#getPart()
然后使用
Part#getInputStream()
将上传的文件作为
InputStream
。     
import org.apache.commons.fileupload.FileItemStream;
 import org.apache.commons.fileupload.FileItemIterator;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;

 import java.io.InputStream;
 import java.io.IOException;
 import java.util.logging.Logger;

 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;

 public class FileUpload extends HttpServlet {
   private static final Logger log =
       Logger.getLogger(FileUpload.class.getName());

   public void doPost(HttpServletRequest req, HttpServletResponse res)
       throws ServletException, IOException {
     try {
       ServletFileUpload upload = new ServletFileUpload();
       res.setContentType("text/plain");

       FileItemIterator iterator = upload.getItemIterator(req);
       while (iterator.hasNext()) {
         FileItemStream item = iterator.next();
         InputStream stream = item.openStream();

         if (item.isFormField()) {
           log.warning("Got a form field: " + item.getFieldName());
         } else {
           log.warning("Got an uploaded file: " + item.getFieldName() +
                       ", name = " + item.getName());

           // You now have the filename (item.getName() and the
           // contents (which you can read from stream).  Here we just
           // print them back out to the servlet output stream, but you
           // will probably want to do something more interesting (for
           // example, wrap them in a Blob and commit them to the
           // datastore).
           int len;
           byte[] buffer = new byte[8192];
           while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
             res.getOutputStream().write(buffer, 0, len);
           }
         }
       }
     } catch (Exception ex) {
       throw new ServletException(ex);
     }
   }
 }
该示例是从Google App Engine文档中提取的,因为GAE也不允许应用程序在磁盘上写入文件。原始示例可以在这里找到     

要回复问题请先登录注册