上传超大文件时出现的,不知道怎么解决,如果设置
[code="java"]con.setChunkedStreamingMode(1024);[/code]
但是很多服务器不支持这种上传方式,我的服务器是tomcat,文件上传组件是struts的文件上传,大家帮我看看这个问题到底怎么解决或者给个方案也行,但我不想修改服务器的代码
你说得没错,那个是一个Post请求而不是文件上传,你需要模拟一个上传请求,试试配置参数:
[code="java"]
con.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
// Allow Inputs
con.setDoInput(true);
// Allow Outputs
con.setDoOutput(true);
// Don't use a cached copy.
con.setUseCaches(false);
// Use a post method.
con.setRequestMethod("POST");
con.setRequestProperty("Connection", "Keep-Alive");
dos = new DataOutputStream( con.getOutputStream() );
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"upload\";"
+ " filename=\"" + exsistingFileName +"\"" + lineEnd);
[/code]
摘自:http://www.jguru.com/faq/view.jsp?EID=62798
你应该边接收边保存,不应该全都先放到内存里面读完了在保存到磁盘
os是写文件磁盘操作吗?试试循环里面os.flush();
是不是有并发还是?再贴多点代码吧。
[quote]
对啊os就是从httpURLConnection.getOutputStream方法得到的输出流对象,os.flush()我试过了还是不行
[/quote]
上传操作的输出流应该是FileOutputStream吧?你是往磁盘写文件呀!
调整VM参数
现在的 vm参数是什么,贴出来看看
[code="java"]
con.setConnectTimeout(10 * 1000);
[/code]
超大文件的话,这个时间太少了。改成:
[code="java"]
con.setConnectTimeout(10 * 60 * 1000);
[/code]
看看
将tomcat的
启动jvm的内存参数改大点
用这种上传超大附件不太保险,可以尝试弄一个Web FTP试试~~