编辑:
得到了目录.现在还有另一个问题:
存储中的文件以其DB id作为其文件名的前缀进行存储.当然我不希望用户看到这些.
有没有办法将response.redirect和标题设置结合起来,文件名和大小?
最好,
A
Run Code Online (Sandbox Code Playgroud)
你好,我们又见面了,
新的方法:
是否可以在tomcat中创建一个类似虚拟目录的IIS,以避免流式传输并且只使用头重定向?我在环境中玩耍但却无法实现......
有任何想法吗?
thx
Run Code Online (Sandbox Code Playgroud)
一个
嗨%,
我正面临着java堆空间的连线问题,这个问题已经接近我的绳索.
简短版本是:
我写了一个ContentManagementSystem,它也需要处理大文件(> 600mb).Tomcat堆设置:
-Xmx700m -Xms400m
问题是,上传巨大的文件虽然很慢,但仍可正常工作.下载文件会导致java堆空间异常.
尝试下载370mb文件会使tomcat跳转到500mb堆(应该没问题)并以Java堆空间异常结束.
我不明白,为什么上传工作和下载不?这是我的下载代码:
byte[] byt = new byte[1024*1024*2];
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
FileInputStream fis = null;
OutputStream os = null;
fis = new FileInputStream(new File(filePath));
os = response.getOutputStream();
BufferedInputStream buffRead = new BufferedInputStream(fis);
while((read = buffRead.read(byt))>0)
{
os.write(byt,0,read);
os.flush();
}
buffRead.close();
os.close();
Run Code Online (Sandbox Code Playgroud)
如果我说得对,缓冲的读者应该处理任何内存问题,对吧?
任何帮助都会受到高度赞赏,因为我没有想法
最好的祝福,
w ^
如果我说得对,缓冲的读者应该处理任何内存问题,对吧?
不,这与内存问题无关,它实际上是不必要的,因为您已经在使用缓冲区来读取文件.你的问题在于写作,而不是阅读.
我看不出你的代码有什么问题.看起来Tomcat正在缓冲整个响应而不是流式传输.我不确定是什么原因引起的.
什么response.getBufferSize()回报?你应该尝试设置response.setContentLength()文件的大小; 我依稀记得在某些情况下,一个Web容器会缓冲整个响应以确定内容长度,所以也许这就是正在发生的事情.无论如何,这是一个很好的做法,因为它使客户能够显示下载大小并为下载提供ETA.
| 归档时间: |
|
| 查看次数: |
2638 次 |
| 最近记录: |