使用Cordova的Filetransfer插件和express / blob存储

时间:2014-10-29 15:45:05

标签: node.js cordova azure express

我正在使用Typescript和Cordova 4.0。

我有以下示例代码:

    uploadImages(imageUris: Array<string>): any {

        var fileTransfer = new FileTransfer();

        for (var i = 0; i < imageUris.length; i++) {
            fileTransfer.upload(imageUris[i], encodeURI('http://3187cf3.ngrok.com/test/photos'), (success) => {
                alert('success');
            }, (err) => {
                alert('error');
            });
        }
    }

这对应于快速路线:

var router = express.Router(),
test = test.controller;

router
.post('/test/photos', bind(test.uploadPhotos, test));

这对应于控制器方法:

uploadPhotos(req: express.Request, res: express.Response) {
    console.log(req);
}

我似乎无法弄清楚如何在我的控制器内抓取&#34;文件&#34;或图像我使用Filetransfer发布到我的服务器。它不在req.bodyreq.query上,当我查看整个req时,我似乎无法找到该文件。应用程序流程足以实际向test/photos发出POST请求,我只是不知道如何在此时访问该文件。

Filetransfer如何工作,如何在控制器中访问我需要的数据,以便将其推送到Azure Blob存储?

1 个答案:

答案 0 :(得分:3)

看起来您已正确设置所有内容以将数据发送到控制器。问题是您需要将file放在请求上,因为cordova的filetransfer插件默认不会这样做。

您可以使用热门图书馆multer

  1. npm install multer --save-dev要安装multer并将其保存到package.json文件中。
  2. 在您的快速配置文件中,添加如下内容:

    var multer = require('multer');
    
    app.use(multer({ dest: path.resolve(config.root, 'public/img/') }))
    

    'public/img/'是您希望保存图片的路径。

  3. 现在,您的req上会有files。要上传单个文件,您可以使用req.files.file。您将要使用此变量将文件发送到azure的blob存储使用类似blobSvc.createBlockBlobFromLocalFile(containerName, fileName, filePath)

  4. 的内容
  5. 由于您使用Azure进行远程存储,因此您可能希望删除multer已保存的本地文件。我建议使用fs或rimraf删除存储在public/img/中的文件,或者在快速配置中设置路径的文件。如果您使用fs,则需要使用.unlink命令。

相关问题