Node.js Azure文件-从托管在Azure上的my Node应用程序下载不工作
我有一个托管在Azure应用程序服务上的nodejs应用程序,还有几个Azure文件上的文件。 我使用azure存储建立了连接,但当我尝试下载文件时,它不起作用。 我正在使用以下功能:Node.js Azure文件-从托管在Azure上的my Node应用程序下载不工作,node.js,azure-storage,azure-sdk,Node.js,Azure Storage,Azure Sdk,我有一个托管在Azure应用程序服务上的nodejs应用程序,还有几个Azure文件上的文件。 我使用azure存储建立了连接,但当我尝试下载文件时,它不起作用。 我正在使用以下功能: app.get('/download/:name', async (req, res) => { var option = new Object(); option.disableContentMD5Validation = true; option.maximumExecution
app.get('/download/:name', async (req, res) => {
var option = new Object();
option.disableContentMD5Validation = true;
option.maximumExecutionTimeInMs = 20 * 60000;
option.timeoutIntervalInMs = 20 * 6000;
fileService.getFileToStream(shareName, directoryName, req.params.name, fs.createWriteStream(req.params.name), option, async function(error, result, response) {
if (error) {
console.log("error");
console.log(error);
} else {
console.log("result");
console.log(result);
console.log("response");
console.log('result ' + JSON.stringify(result, null, 4));
}
});
});
我没有收到任何错误,在我的服务器控制台上显示console.logs:
结果
我打印了结果,但没有通过浏览器下载任何文件。。。
对此有何见解?根据您在文章中的代码,我看到您正在使用Azure Legacy Storage SDK for Node(如下图所示),并开发用于从Azure file Storage下载文件的API 但是,Azure Storage SDK for Node的旧版不支持异步和promise功能。因此,我认为您的问题是由Azure存储SDK的不正确使用引起的 这是我的示例代码,运行良好,我通过
npm I azure storage
和npm I express
安装了必要的节点包
const express = require('express');
const app = express();
const port = 3000;
var azure = require('azure-storage');
var accountName = '<your account name>';
var accountKey = '<your account key>';
var fileService = azure.createFileService(accountName, accountKey);
var shareName = '<your share name, such as `test`>';
var directoryName = ''; // For my testing, it's none.
app.get('/', (req, res) => res.send('Hello World!'));
app.get('/download/:name', (req, res) => {
var fileName = req.params.name;
var option = new Object();
option.disableContentMD5Validation = true;
option.maximumExecutionTimeInMs = 20 * 60000;
option.timeoutIntervalInMs = 20 * 6000;
fileService.getFileToStream(shareName, directoryName, fileName, res, option, function(error, result, response) {
if (error) {
console.log("error");
console.log(error);
} else {
console.log("result");
console.log(result);
console.log("response");
console.log('result ' + JSON.stringify(result, null, 4));
}
});
});
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
createWriteStream
不下载它将创建的任何文件并将日期写入文件(如果您想附加,请在createWriteStream
中使用{flags:'a'}
)。因此,为了使createWriteStream
正常工作,您可能需要提供具有适当扩展名的适当路径。嗨@ShivamSood!谢谢你的回复。我将{flags:'a'}添加到createWriteStream和我的日志中,路径是路径:“magic_quadrant_for_enterprise_361584.pdf”。。。下载文件仍然没有成功。如果您console.log(response.file)
有什么发现吗?我更改了它。。我没有从FileShare下载,而是将所有内容都放在一个blob容器中,并将其公开。。如果你的问题已经解决了,你能给出你的答案吗?
const express = require('express');
const app = express();
const port = 3000;
var azure = require('azure-storage');
var accountName = '<your account name>';
var accountKey = '<your account key>';
var fileService = azure.createFileService(accountName, accountKey);
var shareName = '<your share name, such as `test`>';
var directoryName = ''; // For my testing, it's none.
app.get('/', (req, res) => res.send('Hello World!'));
app.get('/download/:name', (req, res) => {
var fileName = req.params.name;
var option = new Object();
option.disableContentMD5Validation = true;
option.maximumExecutionTimeInMs = 20 * 60000;
option.timeoutIntervalInMs = 20 * 6000;
fileService.getFileToStream(shareName, directoryName, fileName, res, option, function(error, result, response) {
if (error) {
console.log("error");
console.log(error);
} else {
console.log("result");
console.log(result);
console.log("response");
console.log('result ' + JSON.stringify(result, null, 4));
}
});
});
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
Example app listening on port 3000!
result
FileResult {
share: 'test',
directory: '',
name: 'test.json',
metadata: {},
etag: '"0x8D7A40B375873CE"',
lastModified: 'Tue, 28 Jan 2020 16:00:37 GMT',
requestId: 'b5bf6198-e01a-0051-34f4-d53847000000',
serverEncrypted: 'true',
contentLength: '49'
}
response
result {
"share": "test",
"directory": "",
"name": "test.json",
"metadata": {},
"etag": "\"0x8D7A40B375873CE\"",
"lastModified": "Tue, 28 Jan 2020 16:00:37 GMT",
"requestId": "b5bf6198-e01a-0051-34f4-d53847000000",
"serverEncrypted": "true",
"contentLength": "49"
}