Azure 함수 (코드는 Stack Overflow here)에서 다음 코드를 실행하면 대용량 파일이 예상대로 다운로드됩니다. 그러나 때로는 파일에 데이터를 추가하는 것을 멈추고 다시 시작하지 못합니다. 파일이 클수록 더 자주 발생합니다. 나는 어떤 오류도, 아무것도 얻지 않는다. 프로세스가 진행되지 않고 10 초 후에 프로세스를 다시 깨우는 방법이 있습니까, 아니면 프로세스를 계속 주시 할 다른 방법이 있습니까?azure 다운로드 node.js timeout
var azure = require('azure-storage');
var fs = require('fs');
module.exports = function (context, input) {
context.done();
var accessKey = 'myaccesskey';
var storageAccount = 'mystorageaccount';
var containerName = 'mycontainer';
var blobService = azure.createBlobService(storageAccount, accessKey);
var recordName = "a_large_movie.mov";
var blobName = "standard/mov/" + recordName;
var blobSize;
var chunkSize = (1024 * 512) * 8; // I'm experimenting with this variable
var startPos = 0;
var fullPath = "D:/home/site/wwwroot/myAzureFunction/input/";
var blobProperties = blobService.getBlobProperties(containerName, blobName, null, function (error, blob) {
if (error) {
throw error;
}
else {
blobSize = blob.contentLength;
context.log('Registered length: ' + blobSize);
fullPath = fullPath + recordName;
console.log(fullPath);
doDownload();
}
}
);
function doDownload() {
var stream = fs.createWriteStream(fullPath, {flags: 'a'});
var endPos = startPos + chunkSize;
if (endPos > blobSize) {
endPos = blobSize;
context.log('Reached end of file endPos: ' + endPos);
}
context.log("Downloading " + (endPos - startPos) + " bytes starting from " + startPos + " marker.");
blobService.getBlobToStream(
containerName,
blobName,
stream,
{
"rangeStart": startPos,
"rangeEnd": endPos-1
},
function(error) {
if (error) {
throw error;
}
else if (!error) {
startPos = endPos;
if (startPos <= blobSize - 1) {
doDownload();
}
}
}
);
}
};
chunkSize를 4MB에서 1MB로 줄였습니까? –
특별히 1MB가 아닙니다. 내가 512KB의 청크 크기로 시작했지만, 위에서 언급 한 것과 같은 가끔 타임 아웃을 주었다. –
안녕하세요 @ GauravMantri - 청크를 1MB로 바꿨고 더 나아졌습니다. 그러나 지금은 큰 파일이 여전히 시간 초과되므로 문제가 해결되지 않습니다. 그러나 그것을 개선했습니다. 청크 크기와 가능한 시간 초과 사이의 연결은 무엇입니까? –