2017-05-10 10 views
0

ファイルをアップロードするためのExpressベースのAPIを作成しようとしています。ファイル名とディレクトリパスは動的に設定する必要があります。NodeJsでMulterを使用してファイルをアップロード中にエラーが発生しました

マイコード:

var crypto = require('crypto') 
var express = require('express'); 
var fs = require('fs'); 
var mime = require('mime'); 
var mkdirp = require('mkdirp'); 
var multer = require('multer'); 

var app = express(); 
var path = './uploads'; 

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
     callback(null, path); 
     console.log('Im in storage destination'+path); 
    }, 
    filename: function (req, file, callback) { 
     console.log('Im in storage filename'+path); 
     //callback(null, file.fieldname + '-' + Date.now()); 
     crypto.pseudoRandomBytes(16, function (err, raw) { 
      callback(null, Date.now() + '.' + mime.extension(file.mimetype)); 
     }); 
    } 
}); 

var upload = multer({ storage : storage}).single('userPhoto'); 

app.post('/photo',function(req,res){ 
    path += '/pics/shanmu/'; 
    console.log('Im in post , outside upload'+path); 

    upload(req,res,function(err) { 
     console.log('Im in post , inside upload'+path); 
     if(err) { 
      return res.end('Error uploading file.'); 
     } 
     res.end('File is uploaded'+path); 
     console.log('File is uploaded'+path); 
    }); 
}); 

app.listen(3000,function(){ 
    console.log('Working on port 3000'); 
}); 

マイフォルダ構造:

私は、コードを実行すると、ファイルがuploads/フォルダにアップロードする必要があります。 (このフォルダには2つのネストされたフォルダがあります - uploads/pics/shanmu)。

私は郵便配達員からそれを起動したときには、一度しか動作しません。 2回目を試みるとファイルをアップロードできません。

お知らせください。

答えて

0

いつか私はmulterモジュールを使用して解決策を得ました。このモジュールを使用すると、ファイルと画像の両方をアップロードできます。そして、それは宛先フォルダに正常にアップロードされました。ここで

は私のサーバーコードapp.js

var express =r equire('express'); 
var multer = require('multer'); 
var path = require('path') 
var app = express(); 
var ejs = require('ejs') 
app.set('view engine', 'ejs') 
var storage = multer.diskStorage({ 
    destination: function(req, file, callback) { 
     callback(null, './public/uploads')//here you can place your destination path 
    }, 
    filename: function(req, file, callback) { 
     callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)) 
    } 
}) 

app.get('/api/file',function(req,res){ 
res.render('index'); 
}); 
app.post('/api/file', function(req, res) { 
    var upload = multer({ 
     storage: storage}).single('userFile'); 
    upload(req, res, function(err) { 
     console.log("File uploaded"); 
     res.end('File is uploaded') 
    }) 
}) 

app.listen(3000,function(){ 
console.log("working on port 3000"); 
}); 

viewsフォルダを作成した後node app.js .Openなどのブラウザやタイプhttp://localhost:3000/api/fileをサーバーを実行することで、この後

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title></title> 
</head> 
<body> 
    <form id="uploadForm" enctype="multipart/form-data" method="post"> 
     <input type="file" name="userFile" /> 
     <input type="submit" value="Upload File" name="submit"> 
    </form> 
</body> 
</html> 

このindex.ejsファイルを配置していますrunnigこのURLは、あなたが目的のフォルダにアップロードしたいファイルを選択してください。そして、ターミナルとbrowser.Hopeの両方で成功した応答があなたのために役立つことを願っています。

関連する問題