2016-09-27 20 views
1

私はmulterを使用して、Expressルート上のアップロードファイルを処理しています。私は、格納のためにbase64文字列にバッファを書きたいと思います。メモリ内のファイル(複数可)を維持することになっているmemoryStorageオプションまたはnot specifying any optionsを、使用してディスクへの書き込みを行わないときただし、オブジェクト上bufferプロパティは常にnullです:memoryStorageを使用している場合、Multerバッファはnullです

var multer = require('multer'); 
var storage = multer.memoryStorage(); 
. . . 

app.post('/', multer({ storage: storage }).single('photo'), function(req, res) { 
    var photo = req.files.photo || req.file || null; 
    if (photo) { 
     console.log(photo); 
     var data = photo.buffer.toString('base64'); 
     . . . 
    } 
}); 

// Result of console.log 
{ 
    fieldname: 'photo',                                   
    originalname: 'me.jpg',                                  
    name: '71a7e8c6aa262063574ddca9538c5174.jpg',                            
    encoding: '7bit',                                   
    mimetype: 'image/jpeg',                                  
    path: 'C:\\Users\\alsoi\\AppData\\Local\\Temp\\71a7e8c6aa262063574ddca9538c5174.jpg',                  
    extension: 'jpg',                                   
    size: 16563,                                     
    truncated: false,                                   
    buffer: null 
} 

私はJPGを試してみました、 PNGとテキストファイルが含まれますが、結果は常に同じです。

私はthis issueに出くわしましたが、決して解決されませんでした。私は何とかムルターを誤って構成していますか?または、それをディスクに保存してから、それをbase64に非同期で読み込むだけですか?理想的には、multerが作成するはずのバッファを使用したいだけです。

私は開発用にWindows 5.x上でノード5.11.1、Express 4、およびマルチター1.2.0を使用しています。

答えて

0

ミドルウェアではなく関数の中でmulterを呼び出せますか?私はこのようにして、エラーメッセージをより詳細に制御できるようにしています。

var uploadFile = multer(
    { 
    storage: multer.memoryStorage(), 
    }) 
    .single('photo'); 

app.post('/', function(req, res) { 
    uploadFile(req, res, error => { 
    if (error) { // handle error } 
    var photo = req.files.photo || req.file || null; 
    if (photo) { 
     console.log(photo); 
     var data = photo.buffer.toString('base64'); 
     . . . 
    } 
    }); 
}); 
+0

「エラー:送信後にヘッダーを設定できません。」というメッセージが表示されます。 – Brandon

+0

これは奇妙です。あなたの応答が何らかの理由で2回送信されているようです。応答をuploadFileメソッドの外側に送りますが、もう一度その内部に送りますか?また、file.bufferはそこにありますか? – VtoCorleone