私が達成しようとしているもの:ロジックアプリの保存はSFTPからBlobストレージにファイルを保存します。その後、ロジックアプリケーションは、BLOBの詳細をBLOBを取得してローカルに格納するAzure関数に渡します。次の関数は、ローカルに保存されたExcelファイルのパスを取得し、JSONに解析します。 JSONがDBに挿入されます。私はこれをすべてローカルで作業しています。Azureファンクションタイムアウトまたはローカルファイルシステムに書き込もうとするとエラー
問題は、ファイル名とBLOBのコンテナを渡して読み取る最初の関数を取得しようとしていることです。そこからそれを保存する必要があります。私は、D:/紺色の関数のまたはのD:/ local/Temp/を使用してみました。
私はどちらかここではそれらのパスに
Exception while executing function: Functions.retrieveAndStoreBlobFile. mscorlib: StorageError: NotFound
at Function.StorageServiceClient._normalizeError (D:\home\site\wwwroot\node_modules\azure-storage\lib\common\services\storageserviceclient.js:1181:23)
at BlobService.StorageServiceClient._processResponse (D:\home\site\wwwroot\node_modules\azure-storage\lib\common\services\storageserviceclient.js:736:50)
at Request.processResponseCallback [as _callback] (D:\home\site\wwwroot\node_modules\azure-storage\lib\common\services\storageserviceclient.js:317:37)
at Request.self.callback (D:\home\site\wwwroot\node_modules\azure-storage\node_modules\request\request.js:187:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (D:\home\site\wwwroot\node_modules\azure-storage\node_modules\request\request.js:1044:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage.<anonymous> (D:\home\site\wwwroot\node_modules\azure-storage\node_modules\request\request.js:965:12).
を使用すると、ここでブロブの詳細
var blobRepo = require("../repository/blobStorage.js");
const localFileStoragePath = process.env["LocalDiskLocation"];
module.exports = function (context, req) {
context.log('Blob HTTP trigger function processed a request.');
context.log('Local path: ' + localFileStoragePath);
if(req.body){
var fileName = req.body.fileName;
var container = req.body.container;
blobRepo.getBlob(container, fileName).then((result) => {
// Return blob details
context.done(null, {
status: 200,
body: {
"blobDetails" : result.blobDetails,
"filePath" : result.filePath
}
})
}).catch((err) => {
context.done(err);
});
}
else {
context.done("Please pass a name on the query string or in the request body", {
status: 400,
body: "Please pass a name on the query string or in the request body"
});
}
};
を受け取るために私の関数であるとき、この例外を取得するには、BLOBストレージから読み取られ、ファイルを保存するために私のレポです
var azure = require('azure-storage');
var fs = require('fs');
const localFileStoragePath = process.env["LocalDiskLocation"];
var webStorageConnectionString = process.env["AzureWebJobsStorage"];
var blobService = azure.createBlobService(webStorageConnectionString);
var exportObject = {
getBlob: function(container, blobName){
return new Promise ((resolve, reject) => {
// Read file from blob and store on drive
blobService.getBlobToStream(container, blobName,
fs.createWriteStream(localFileStoragePath + blobName), function(error, serverBlob) {
if(error){
reject(error);
return;
}
const blobDetails = {
filePath: localFileStoragePath + blobName,
blobDetails: JSON.stringify(serverBlob)
}
// Return blob details and path to file
resolve(blobDetails);
});
});
}
}
module.exports = exportObject;
edit:今後の研究の結果、空のファイルがD:\ Homeディレクトリに作成されているものの、何も含まれていないようです。このエラーは、要求が私のものとまったく同じであるため、奇妙なブロブストレージを指しているようです。