gpt4 book ai didi

java - 长时间运行的任务并忽略后续的 doGet() 调用

转载 作者:行者123 更新时间:2023-12-01 14:16:10 25 4
gpt4 key购买 nike

我有一个简单的 servlet,可以将视频文件返回给客户端。我想要做的是将文件从 URL 下载到我的服务器上,然后将新下载的文件发送到客户端。我的问题是 servlet 的入口点位于客户端请求文件的 doGet() 方法内部。我想下载该文件一次并将其用作静态文件。但是,因为我在 doGet() 中调用下载函数,当客户端尝试获取文件时,它会不断重复 doGet() 中发生的所有事情,并且我的文件不断被覆盖。它确实减慢了整个过程。我是否可以只调用一次下载函数?

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
answerRequest(request, response);
}
...

public void answerRequest(HttpServletRequest request, HttpServletResponse response)
throws IOException{
String requestedFile = request.getPathInfo();

URL newURL = "fixed URL content";
HttpURLConnection connection = (HttpURLConnection) newURL.openConnection();


sendFile(connection, request, response);
}

...

public void sendFile(HttpURLConnection connection, HttpServletRequest request, HttpServletResponse response){
InputStream input = null;
FileOutputStream output = null;


File videoFile = new File("path-to-file");
input = connection.getInputStream();
output = new FileOutputStream(videoFile);
Utility.download(input, output, 0, connection.getContentLength()); //this is where the file is downloaded onto my server)


connection.disconnect();
close(output);
close(input);

//this is where the file is sent back to client
Utility.sendFile(videoFile, response, request,true);
...
}

正如您所看到的,每次 doGet() 发生时,所有这些函数都会发生。但我只希望 Utility.download() 执行一次。我该怎么做?

最佳答案

您可以向 session 变量添加 boolean 标志。例如第一次执行do get时:

boolean started = true;

然后在调用 Utility.sendFile() 之前检查 boolean 标志是 true 还是 false 并相应地运行该方法。

关于java - 长时间运行的任务并忽略后续的 doGet() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092721/

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