javascript - 在 Docker 中使用 Angular 和 Express 下载文件
问题描述
我试图让用户下载他们已经上传的文件。我正在使用 Angular 来访问 Node.js REST API。这些文件存储在 Azure 存储中。Angular UI 和 Service 都在服务器上的 docker 容器中运行。
当我在本地尝试此操作时,它在第一次调用在本地 docker 中运行的新服务时起作用,但由于某种原因,每个后续调用都失败了。我现在整天都在做这个,不知道为什么它不能持续工作。
角函数:
Top 函数在组件中,它调用我的 dataService,它对 REST API 进行实际的 GET 调用。这一切在我看来都是对的。
downloadFile(id, type) {
this._dataService.downloadFile(id).subscribe((x) => {
let temp: any;
temp = x;
let newBlob = new Blob([x as BlobPart], { type: temp.type });
let downloadURL = URL.createObjectURL(newBlob);
let link = document.createElement('a');
link.href = downloadURL;
link.download = type;
link.click();
});
}
downloadFile(fileUploadID) {
const httpOptions = {
responseType: 'blob' as 'json',
// headers: new HttpHeaders({
// 'Authorization': this.authKey,
// })
};
let uri = "File_Upload/DownloadBlob/" + fileUploadID.toString();
return this._http.get(this.urlUser() + uri, httpOptions);
}
这是尝试下载的 REST API 代码。
路线:
router.get('/File_Upload/DownloadBlob/:fileUploadID', function (req, res) {
//response.sendJson(req, res, {'Excel':filePath});
controller.sendBlobByFileUpload(req, res, req.params.fileUploadID)
});
控制器:
exports.sendBlobByFileUpload = async function(req, res, fileUploadID){
let fileUploadRecSet = await model.getFileUploadByID(req, res, fileUploadID);
console.log(fileUploadRecSet)
let filename = 'runtime/downloads/'+fileUploadRecSet[0]['File_Name_Source']
await blob.download(req, res, filename, fileUploadRecSet[0]['Blob_Name'])
console.log(filename)
this.sendFile(req, res, `/home/dvtech/src/pst-service/api/${filename}`)
}
exports.sendFile = function (req, res, file) {
var options = {
dotfiles: 'deny',
headers: {
'Content-Disposition': 'attachment',
'x-timestamp': Date.now(),
'x-sent': true,
'x-filename': file
}
};
res.sendFile(file, options, function (err) {
if (err) {
console.log('Error Sending: ', file, ', err: ', err);
// next(err);
} else {
console.log('Sent:', file);
}
});
}
我一直无法在网上找到任何东西。我所看到的大部分内容都说这段代码可以工作,它确实可以,但在新的服务器重新启动时只有 1 次。
解决方案
推荐阅读
- docker - 如何使用多个 docker 容器对 APP 进行版本控制
- javascript - 如何使 console.log() 写入 hapi.js 中的文件
- swift - 如何在颤动中访问快照上的子属性?
- reactjs - Reac Native + React Navigation - 我希望屏幕在 TabNavigator 上不可见
- excel - 如何将 Excel 报告的开始写入事件日志
- html - 使 div 填充所有浏览器高度而没有子 div 溢出父
- apache-flink - flink ReducingState 影响性能
- html - ngbPopover 悬停时不显示
- swift - URL 上的 Swift Nil 异常
- python - Python Beautifulsoup 标记选择 - 复杂问题