我正在使用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.body
或req.query
上,当我查看整个req
时,我似乎无法找到该文件。应用程序流程足以实际向test/photos
发出POST请求,我只是不知道如何在此时访问该文件。
Filetransfer如何工作,如何在控制器中访问我需要的数据,以便将其推送到Azure Blob存储?
答案 0 :(得分:3)
看起来您已正确设置所有内容以将数据发送到控制器。问题是您需要将file
放在请求上,因为cordova的filetransfer插件默认不会这样做。
您可以使用热门图书馆multer。
npm install multer --save-dev
要安装multer
并将其保存到package.json
文件中。在您的快速配置文件中,添加如下内容:
var multer = require('multer');
app.use(multer({ dest: path.resolve(config.root, 'public/img/') }))
'public/img/'
是您希望保存图片的路径。
现在,您的req
上会有files
。要上传单个文件,您可以使用req.files.file
。您将要使用此变量将文件发送到azure的blob存储使用类似blobSvc.createBlockBlobFromLocalFile(containerName, fileName, filePath)
由于您使用Azure进行远程存储,因此您可能希望删除multer
已保存的本地文件。我建议使用fs或rimraf删除存储在public/img/
中的文件,或者在快速配置中设置路径的文件。如果您使用fs
,则需要使用.unlink
命令。