简体   繁体   English

apache.commons.fileupload引发MalformedStreamException

[英]apache.commons.fileupload throws MalformedStreamException

I have got this piece of code (I didn't write, just maintaining): 我有这段代码(我没有写,只是维护):

public class MyMultipartResolver extends CommonsMultipartResolver{    
  public List parseEmptyRequest(HttpServletRequest request) throws IOException, FileUploadException {
            String contentType = request.getHeader(CONTENT_TYPE);
            int boundaryIndex = contentType.indexOf("boundary=");

            InputStream input = request.getInputStream();

            byte[] boundary = contentType.substring(boundaryIndex + 9).getBytes();
            MultipartStream multi = new MultipartStream(input, boundary);
            multi.setHeaderEncoding(getHeaderEncoding());

            ArrayList items = new ArrayList();
            boolean nextPart = multi.skipPreamble();
            while (nextPart) {
                Map headers = parseHeaders(multi.readHeaders());
               // String fieldName = getFieldName(headers);

                String subContentType = getHeader(headers, CONTENT_TYPE);
                if (subContentType == null) {
                    FileItem item = createItem(headers, true);
                    OutputStream os = item.getOutputStream();
                    try {
                        multi.readBodyData(os);
                    } finally {
                        os.close();
                    }
                    items.add(item);
                } else {
                    multi.discardBodyData();
                }

                nextPart = multi.readBoundary();
            }

            return items;
        }
}

I am using commons-fileupload.jar version 1.2.1 and obviously the code is using some deprecated methods... 我正在使用commons-fileupload.jar版本1.2.1,显然代码使用了一些不赞成使用的方法...
Anyway, while trying to use this code to upload a very large file (780 MB) I get this: 无论如何,在尝试使用此代码上传非常大的文件(780 MB)时,我得到了:

org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:983)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
    at java.io.InputStream.read(InputStream.java:89)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
    at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:593)
    at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:619)

that is thrown from 'multi.discardBodyData();' 从“ multi.discardBodyData();”中抛出的 line. 线。
My question: How can I avoid this error and be able to be able to succeed collecting the FileItems? 我的问题:如何避免此错误并能够成功收集FileItems?

catch 抓住

(org.apache.commons.fileupload.MultipartStream.MalformedStreamException e)
        {

            e.printStackTrace();

            return ERROR;
        }

Catch the exception and handle it via ..either InputStream or Return Error use it in struts action tag 捕获异常,并通过..either处理它InputStreamReturn Error使用它在Struts动作标签

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM