6

「名前の変更」機能 (および他のすべての multer コールバック) が機能しない理由を知っている人はいますか?

var express = require('express');
var multer  = require('multer');

var app = express();

app.use(multer({
    dest: 'uploads/',
    rename: function (fieldname, filename) {
        return new Date().getTime();
    },
    onFileUploadStart: function (file) {
        console.log(file.name + ' is starting ...');
    },
    onFileUploadComplete: function (file, req, res) {
        console.log(file.name + ' uploading is ended ...');
        console.log("File name : "+ file.name +"\n"+ "FilePath: "+ file.path)
    },
    onError: function (error, next) {
        console.log("File uploading error: => "+error)
        next(error)
    },
    onFileSizeLimit: function (file) {
        console.log('Failed: ', file.originalname +" in path: "+file.path)
        fs.unlink(path.join(__dirname, '../tmpUploads/') + file.path) // delete the partially written file
    }
}).array('photos', 12));



app.listen(8080,function(){
    console.log("Working on port 8080");
});

app.get('/',function(req,res){
    res.sendFile(__dirname + "/index.html");
});


app.post('/photos/upload', function (req, res, next) {
    // req.files is array of `photos` files
    // req.body will contain the text fields, if there were any
    //console.log(req.files);
    //console.log(req.body);
    res.json(req.files)

});
4

2 に答える 2

9

時代とともに使い方も変わってきているようです。現在、multerコンストラクターは次のオプションのみを受け入れます ( https://www.npmjs.com/package/multer#multer-opts ):

  • destまたはstorage - ファイルを保存する場所
  • fileFilter- どのファイルを受け入れるかを制御する機能
  • limits- アップロードされるデータの制限

したがって、たとえば、適切なストレージを構成することで名前の変更を解決できます ( https://www.npmjs.com/package/multer#storage )。

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads'); // Absolute path. Folder must exist, will not be created for you.
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now());
  }
})

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

app.post('/profile', upload.single('fieldname'), function (req, res, next) {
    // req.body contains the text fields 
});

fieldname、リクエスト本文のフィールド名と一致する必要があります。つまり、HTML フォーム ポストの場合、フォーム アップロード要素の入力名です。

また、少し異なる機能を提供するhttps://www.npmjs.com/package/multer#single-fieldnamearrayなどの他fieldsのミドルウェア機能も探してください。

また、制限 ( https://www.npmjs.com/package/multer#limits ) とファイル フィルター ( https://www.npmjs.com/package/multer#filefilter )にも興味があるかもしれません。

また、ソースは信頼できる単一のソースです

于 2015-08-28T14:47:47.297 に答える