编辑:
得到了要生存的目录。现在还有另一个问题:
存储中的文件以其 DB id 作为前缀存储 到他们的文件名。我当然不希望用户看到这些。
有没有办法结合 response.redirect 和 header 设置 für 文件名和大小?
最好的,
A
你好,
新方法:
是否可以在tomcat中创建类似IIS的虚拟目录 避免流式传输并仅使用 header 重定向?我玩过 上下文,但无法让它继续......
有什么想法吗?
thx
一个
你好 %,
我正面临 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();
如果我做对了,缓冲阅读器应该会处理任何问题 内存问题,对吧?
任何帮助将不胜感激,因为我已经没有想法了
最好的问候,
W
最佳答案
If I'm getting it right the buffered reader should take care of any memory issue, right?
不,这与内存问题无关,它实际上是不必要的,因为您已经在使用缓冲区来读取文件。你的问题是写作,而不是阅读。
我看不出您的代码有任何问题。看起来 Tomcat 正在缓冲整个响应而不是流式传输。我不确定是什么原因造成的。
response.getBufferSize()
返回什么?您应该尝试将 response.setContentLength()
设置为文件的大小;我依稀记得 Web 容器在某些情况下会缓冲整个响应以确定内容长度,所以也许这就是正在发生的事情。无论如何都这样做是一种很好的做法,因为它使客户端能够显示下载大小并为下载提供预计到达时间。
关于Java 堆空间(带有大文件的 CMS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1000219/