使用带有Node的Express将约800mb的zip文件上传到Azure存储。我正在使用'azure-storage'软件包(https://www.npmjs.com/package/azure-storage)连接并上传/下载到Azure存储。 该文件通过Angular应用程序上传,分成10mb,然后传递到Node应用程序。我尝试了以下方法:
const azure = require('azure-storage');
const blobService = azure.createBlobService(<STORAGE_ACCOUNT>, <STORAGE_ACCESS_KEY>);
const fileService = azure.createFileServiceazure.createBlobService(<STORAGE_ACCOUNT>, <STORAGE_ACCESS_KEY>);
fileService.createShareIfNotExists(
<task_name>,
(error, result, response) => {
if (!error) {
fileService.createDirectoryIfNotExists(
<task_name>,
<directory_name>,
(error, result, response) => {
if (!error) {
fileService.createFileFromLocalFile(
<task_name>,
<directory_name>,
<file_name>,
<path_to_local_file>,
(error, result, response) => {
if (!error) {
res.status(200).json({message: "Uploaded"});
} else {
console.log(error);
}
});
}
});
}
});
blobService.createContainerIfNotExists(
<container_name>,
{publicAccessLevel: 'blob'},
(error, result, response) => {
if (!error) {
blobService.createBlockBlobFromLocalFile(
<container_name>,
<blob_name>,
<path_to_local_file>,
(error, result, response) => {
if (!error) {
res.status(200).json({message: "Uploaded"});
} else {
console.log(error);
}
});
}
});
fileService.createShareIfNotExists(
<task_name>,
(error, result, response) => {
if (!error) {
fileService.createDirectoryIfNotExists(
<task_name>,
<directory_name>,
(error, result, response) => {
if (!error) {
fileService.createFileFromStream(
<task_name>,
<directory_name>,
<file_name>,
<read_stream>,
<stream_length>,
(error, result, response) => {
if (!error) {
res.status(200).json({message: "Uploaded"});
} else {
console.log(error);
}
}
)
}
});
}
});
blobService.createContainerIfNotExists(
<container_name>,
{publicAccessLevel: 'blob'},
(error, result, response) => {
if (!error) {
blobService.createAppendBlobFromStream(
<container_name>,
<blob_name>,
<read_stream>,
<stream_length>,
(error, result, response) => {
if (!error) {
res.status(200).json({message: "Uploaded"});
} else {
console.log(error);
}
});
}
});
我也尝试过createPageBlobFromStream
,但是没有运气。
我认为多格式或CORS不会成为问题,因为从本地文件上传对于小型文件而言效果很好。
修改 我能够找到解决我的一个问题的方法- 我只需要增加从前端到后端的请求的“请求超时”, 在控制器中:
exports.uploadToAzure = (req, res, next) => {
req.setTimeout(5000000); //initially set a high timeout
//your code with proper error handling
res.status(200);
};
Azure甚至在上传完成之前也会分配存储中的文件大小。我期望随着文件在Azure上的上传而逐渐增加大小。就我而言,请求在成功上传之前总是会对大型文件超时,这使我认为上传很好(因为大小不错),但已损坏。
但是我仍然无法使用appendFromStream方法在流出现时追加流,并绕过将其保存在磁盘上。关于如何利用该方法有什么想法?谢谢。