如何将本地文件发送到azure web app

时间:2017-01-31 22:13:59

标签: node.js azure express sftp

我有一个M(ySQL)EAN堆栈应用程序,我已部署到Azure。该应用程序应允许用户上传内容(包括doc文件,图像,音频等)。

在我的快速路线的后端,当用户上传内容时,我使用promise-sftp模块将本地文件发送到远程服务器进行存储,如下所示:

var AsyncClient  = require('promise-sftp');

var sftp = new AsynClient();
sftp.connect(options).then(function (serverMsg) {
    console.log('sftp connected ... multer uploading');

    // error handling for multer upload
    upload(req, res, function (err) {
        if(err)
            return res.send(err);

        var doc = {...} //create document object from req.files[0]

        sftp.fastPut(doc.doc_storage_path, process.env.REMOTE_URL + doc.doc_file_name,{...}})
            .then(function () { 
                 //do something 
                 return sftp.end(); //end sftp connection
             });


        //save file info to mysql db
        ...
    });

当我在本地开发时这很好用,但是当我将它部署到Azure时它不起作用。该文件在本地保存到文件系统,文件信息保存到MySQL数据库,但发送到远程服务器永远不会发生。

我不确定是否需要在Azure VM上安装sftp服务器。如果它有助于我的所有网络应用都使用Azure's Shared App Service Plan。我不是很精明,所以任何帮助理解这一点都是值得赞赏的!

1 个答案:

答案 0 :(得分:0)

我建议您尝试利用Azure Blob存储来满足您的需求,而不是创建sFTP服务器。例如,用户将非结构化对象数据(如文本或二进制数据)上传到应用程序中的Azure存储,完成后,将Blob的URL设置为MySQL数据库,然后可以通过HTTP或HTTPS从世界上任何地方访问该文件

关于如何使用Node.js中的Blob存储,请参阅https://docs.microsoft.com/en-us/azure/storage/storage-nodejs-how-to-use-blob-storage

另外,您可以在https://github.com/Azure-Samples/storage-blob-node-getting-started上参考Github上的示例。