gpt4 book ai didi

java - 检查来自 HttpServletResponse 的流是否被客户端下载 - JAVA

转载 作者:可可西里 更新时间:2023-11-01 17:34:53 25 4
gpt4 key购买 nike

基本上,我的系统生成 url 以从我的服务器下载文件。我使用 Struts 进行此操作,结果类型为“stream”。这个工作很棒。现在我想注意每个下载的文件,是否已完全下载。

我已经搜索了一段时间,但真的不知道如何继续。我是这方面的初学者。

**

新 Action :

**

  public String download(){
try {
String path = Init.getWebInfPath() + UploadManager.getInstance().getProperty("UPLOAD_DIR") + content.getZipFile();
file = new FileInputStream(new File(path));
} catch (Exception e) {
return ERROR;
}

Long overallSize = null;
try {
overallSize = file.getChannel().size();
} catch (IOException e) {
e.printStackTrace();
}

response.setContentType("application/zip");
response.addHeader("Content-Disposition", "attachment; filename=\""+content.getZipFile()+"\"");
response.setHeader("Content-Length", String.valueOf(overallSize));

ServletOutputStream sos = null;
try {
sos = response.getOutputStream();
int read;
read = file.read();
while (read>0){
sos.write(read);
read = file.read();
}
} catch(Exception e){
return ERROR;
}

return NONE;

**

新的 xml:

**

<struts>
<package name="content" namespace="/content" extends="default">
<action name="download" class="com.tictapps.adserver.web.content.ContentAction" method="download">
<result name="none"/>
</action>
</package>
</struts>

最佳答案

一旦返回 stream 结果,就无法再控制 OutputStream。

我想到的确保文件完全下载的第一种方法是:

  1. 直接写入 OutputStream,并返回结果 NONE(未映射到任何内容)而不是 SUCCESS(已映射到 Stream) .您将完全控制响应,但会失去一些框架自动化。这有效,I've did it in the past .

  2. 根据 Stream 结果的源代码创建自定义结果,例如。 StreamWithConfirm,并在其中添加你需要的逻辑。

  3. 您可能可以在自定义拦截器中执行此操作(显然是在调用后部分),但我不确定,顺便说一句,这对于新手来说是三个中最难的一个。

1(改编链接答案中的代码)应该是您所需要的。

关于java - 检查来自 HttpServletResponse 的流是否被客户端下载 - JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com