2014-10-29 23 views
0

我使用的是Typescript和Cordova 4.0。將Cordova的FileTransfer插件與Express/Blob存儲配合使用

我有以下示例代碼:

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); 
} 

我不能似乎弄清楚如何在我的控制器內部抓取使用文件發佈到我的服務器的「文件」或圖像轉讓。這不是在req.bodyreq.query,當我查看整個req我似乎無法找到該文件。應用程序流程已經足夠用於將POST請求發送到test/photos,我只是不知道該如何訪問該文件。

Filetransfer如何工作,以及如何在控制器中訪問我需要的數據以便將其推送到Azure Blob存儲?

回答

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. 由於您使用Azure的遠程存儲,機會是你將要刪除本地文件multer已保存。我建議使用fs或rimraf刪除存儲在public/img/中的文件,或者任何您在快速配置中設置路徑的文件。如果您使用的是fs,則需要使用.unlink命令。

相關問題