我们有一个Web应用程序,其中agnular.js中的客户端和java中的服务器。我们已经部署了此应用程序Docker容器。现在,我们的应用日志在位置 /var/tmp/logs.tar 中创建。
我们的用例是为最终用户提供下载此日志文件的工具,即logs.tar。目前,我们是在单击按钮时使用Blob八位字节流在客户端上提供此下载工具的。我们的问题是,如果此日志大小在某些GB中变得很大,则在流式传输时会在应用程序内存上造成负载。因此,我们要提供一种功能,而不是流式传输外部链接,而是通过单击按钮直接从中下载文件。我们希望使用代码作为应用程序功能来实现。
服务器端功能-
public File downloadLogs() {
File file = null;
try {
executor.execute("/bin/sh", "-c", mcmProp.getKeyValue("download.log.script.location"));
String filePath = "/var/tmp/logs.tar";
file = new File(filePath);
logger.debug("File exist for download");
return file;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
客户端代码-
this._service.downloadLogs().subscribe(
success => {
var blb = new Blob([success], { 'type': "application/octet-stream" });
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blb, 'logs.tar');
}
else {
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blb);
link.download = "logs.tar";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
});