Node.js Azure文件-从托管在Azure上的my Node应用程序下载不工作

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

我有一个托管在Azure应用程序服务上的nodejs应用程序,还有几个Azure文件上的文件。 我使用azure存储建立了连接,但当我尝试下载文件时,它不起作用。 我正在使用以下功能:

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"
}