2016-08-04 38 views
0

我已經將multer設置爲路由上的中間件。當該路線被擊中時,multer不會下載該文件。這是CONSOLE.LOG報道:Multer沒有將文件保存爲文件

{ firstname: 'foo', 
    lastname: 'foo', 
    username: 'foo10', 
    password: 'test1234', 
    file: '/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAAB..... 

} 

我有multer以下設置:

var storage = multer.diskStorage({ 
    destination: function(req, file, cb) { 
    cb(null, '../images/profile'); 
    }, 
    filename: function(req, file, cb) { 
    cb(null, req.body.username + '.jpeg'); 
    } 
}); 

var upload = multer({storage: storage}); 

router.post('/auth/signup', upload.single('file'), function(req,res) { 
    console.log(req.body); 
}); 

所以,問題在於不是將文件保存爲一個文件,它只是將其視爲另一個關鍵在形式中的值對。

爲了進一步澄清,我獲得從科爾多瓦API此圖像: http://ionicframework.com/docs/v2/native/camera/

import { Camera } from 'ionic-native'; 

Camera.getPicture(options).then((imageData) => { 
// imageData is either a base64 encoded string or a file URI 
// If it's base64: 
    let base64Image = 'data:image/jpeg;base64,' + imageData; 

    let formData: FormData = new FormData(), 
     xhr: XMLHttpRequest = new XMLHttpRequest();  
     formData.append("file", base64Image); 

     xhr.onreadystatechange =() => { 
      if (xhr.readyState === 4) { 
      if (xhr.status === 200) { 
       observer.next(JSON.parse(xhr.response)); 
       observer.complete(); 
      } else { 
       observer.error(xhr.response); 
      } 
      } 
     }; 
     xhr.open('POST', 'http://localhost:8080/auth/signup', true); 
     xhr.send(formData); 

}, (err) => { 
// Handle error 
}); 
+0

我不明白嗎?您正在嘗試保存文件並且無法正常工作?發生什麼事? –

+0

澄清添加 – runtimeZero

+0

這看起來像一個Base64編碼的JPEG。你確定你的客戶端代碼正確地上傳表單數據嗎? – robertklep

回答

0

文件數據正在上載爲Base64串,這表明它沒有被上傳作爲一個適當的File形式的數據字段。這就是爲什麼multer將其視爲常規字段,並且不會嘗試將其保存到文件。

this answer中,提供了一些客戶端代碼來處理數據URI字符串(如base64Image)以正確的格式上傳到服務器。