簡體   English   中英

如何在多方連接中設置上傳文件的名稱?

[英]how to set name of file being uploaded in connect-multiparty?

我有一個頁面,我想接受一個文件和 3-4 個用戶輸入,我能夠使用connect-multiparty middle-ware實現這一點,但上傳文件的名稱是帶有正確擴展名的亂碼,上傳的文件內容也是正確的。

我想實現以下目標

  1. 設置上傳文件的名稱
  2. 如果目標目錄中存在同名文件,則創建同名文件的副本
  3. 設置最大大小限制並限制文件類型。

我在網上搜索,但找不到任何工作示例。 我的完整代碼如下

var express = require('express');
var router = express.Router();
var fs = require('fs');
var multiparty = require('connect-multiparty');
var multipartyMiddleware = multiparty({
    uploadDir : '../public/uploads'
});

router.post('/api/user/uploads', multipartyMiddleware, function(req, res) {

    var file = req.files.file;
    console.log(file.name);
    console.log(file.type);
    console.log(file);
    console.log(req.body.test);

    console.log("The file was saved!");
    res.json({
        success : 1
    });
    return;

});

module.exports = router;

使用fs.rename()復制后,您必須重命名文件,或修改 node_modules 內的多方源代碼。 在他們的代碼中,他們有一個重命名的函數:

function uploadPath(baseDir, filename) {
  var ext = path.extname(filename).replace(FILE_EXT_RE, '$1');
  var name = randoString(18) + ext;
  return path.join(baseDir, name);
}

我對他們的代碼做了一些修改,所以我可以像multer一樣使用它:

https://gist.github.com/Edudjr/999c80df952458cc583272a5161b4d08

你會像這樣使用它:

var EXT_RE = /(\.[_\-a-zA-Z0-9]{0,16}).*/g;
var options = {
    uploadDir : path.join(__dirname,'../public/images'),
    filename: function(filename, callback){
     var name = filename.replace(EXT_RE, "");
     callback(name+'-YEAH.png');
   }
}
var form = new multiparty.Form(options);

他們強烈建議您將文件保存在臨時文件夾中,以防止服務器上出現 DoS。

https://github.com/pillarjs/multiparty/issues/64

您可以輕松訪問它,我用它來獲取文件名。

 console.log(req.files.uploads.path.split('\\')[1]);

我正在使用來自 Angular 的上傳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM