apache.commons.fileupload抛出MalformedStreamException [英] apache.commons.fileupload throws MalformedStreamException

查看:292
本文介绍了apache.commons.fileupload抛出MalformedStreamException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  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();
尝试{
multi.readBodyData(os);
} finally {
os.close();
}
items.add(item);
} else {
multi.discardBodyData();
}

nextPart = multi.readBoundary();
}

退货项目;




$ b我使用的是commons-fileupload.jar版本1.2。 1,显然代码是使用一些不赞成使用的方法...
无论如何,当试图使用这段代码来上传一个非常大的文件(780 MB),我得到这个:

  org.apache.commons.fileupload.MultipartStream $ MalformedStreamException:Stream意外地结束
在org.apache.commons.fileupload.MultipartStream $ ItemInputStream.makeAvailable (InputStream.java:89)
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(MultipartStre am.java:619)

从'multi.discardBodyData();'行抛出。

我的问题:
如何避免这个错误,并且能够成功地收集FileItems?

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

e.printStackTrace();

return ERROR;



$ b $ p
$ b

捕获异常并通过..处理它。 InputStream 返回错误在struts动作标记中使用它

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...
Anyway, while trying to use this code to upload a very large file (780 MB) I get this:

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();' line.
My question: How can I avoid this error and be able to be able to succeed collecting the 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

这篇关于apache.commons.fileupload抛出MalformedStreamException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆