2011-10-21 9:31:35 org.apache.struts.upload.CommonsMultipartRequestHandler handl
eRequest
严重: Failed to parse multipart request
org.apache.commons.fileupload.FileUploadException: Processing of multipart/form-
data request failed. Stream ended unexpectedly
        at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadB
ase.java:429)
        at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest
(CommonsMultipartRequestHandler.java:193)
        at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:442)
        at org.apache.struts.action.RequestProcessor.processPopulate(RequestProc
essor.java:816)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:203)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:119
6)
        at actions.MyActionServlet.doPost(MyActionServlet.java:32)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ss(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
7)
        at java.lang.Thread.run(Unknown Source)
上面是Tomcat控制台报错,我在Struts-config里面设定的大小是1000M的。
上传一个15M的小视频就没有问题的,求高人解答下。

解决方案 »

  1.   

    麻烦问下是用的apache的common-fileupload上传吗?代码贴出一部分看看。
      

  2.   


    public String upload(VideoForm videoForm){
    String fileTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());//文件上传时间
    String fileName = fileTime + ".wmv"; //文件的物理名称=文件上传时间+格式
    String filePath = PathConfig.getInstance().getProperty("videoPath"); //文件的物理存储路径从配置文件中获取
    FormFile video = videoForm.getVideoFile(); //获取视频实体
    //String fileDBName = photo.getFileName(); //文件的数据库名称
    //String fileDBPath = filePath + fileName; //文件的数据库路径

    int length = 0; //初始化长度
    byte[] buf = new byte[1024]; //初始化流
    //照片上传操作
    try {
    InputStream docStream = video.getInputStream(); //获取输入流
    File videoFile = new File(filePath,fileName); //初始化一个photo对象,存储的路径,存储的名称。
    FileOutputStream docfos = new FileOutputStream(videoFile); //初始化文件输出流
    while((length=docStream.read(buf))!=-1)
    {
    docfos.write(buf, 0, length);
    }
    docStream.close();
    docfos.close();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return fileName;
    }
      

  3.   

    有几处你修改下试试:
    byte[] buf = new byte[docStream .available()];
    Struts-config你怎么配置的啊,struts1设置文件上传大小还没玩过,学习下。
      

  4.   


    1、在struts-config里面加入一个controller
    <struts-config>
    <controller maxFileSize="1000M" />
    </struts-config>
    2、在提交的Form表单里加入 enctype="multipart/form-data"
    3、ActionForm里面声明FormFile的字段满足以上三点就可以开动了!
      

  5.   

    HTTP不适合做大文件上传,要保证上传的质量得做专门的客户端
      

  6.   

    需要设置下缓冲区大小,要不然,内存溢出.
    <!-- 设置Struts2默认的最大上传为1G -->
    <constant name="struts.multipart.maxSize" value="1073741824"></constant>/*
     * 上传文件
     */
    public String uploadFile(File upload, String uploadFileName,
    String directory) {
    String path = "upload"; String filePath = "";
    try { HttpServletRequest request = ServletActionContext.getRequest(); String fileName = uploadFileName; // 获取物理路径
    String sPath = request.getRealPath(path+File.separator + directory)+File.separator;
    // 获取网络地址
    filePath = path + "/" + directory
    + "/" + fileName; String outputFileName = sPath + fileName; File outputPathFile = new File(sPath);
    if (!outputPathFile.exists()) {
    outputPathFile.mkdirs();
    } // 保存文件
    File outputFile = new File(outputFileName);
    java.io.InputStream is = new FileInputStream(upload);
    java.io.OutputStream os = new java.io.FileOutputStream(outputFile); if (outputFile.exists())
    outputFile.delete(); byte buffer[] = new byte[8192];
    int count = 0;
    while ((count = is.read(buffer)) > 0) {
    os.write(buffer, 0, count);
    } os.close();
    is.close(); } catch (Exception e) {
    e.printStackTrace();
    }
    return filePath;
    }