javascript - 如何设置连接多方上传文件的名称?

标签 javascript node.js express

我有一个页面,我想接受一个文件和 3-4 个用户输入,我能够使用 connect-multiparty middle-ware 实现这一点,但是上传文件的名称是一些东西带有正确扩展名的乱码和上传的文件内容太正确了。

我想实现以下目标

  1. Set name of file being uploaded
  2. Create copy of file with different name if the file with same name exists in target directory
  3. Set max limit on size and restrict type of file.

我在网上搜索但找不到任何可用的示例。我的完整代码如下

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 中multiparty 的源代码。在他们的代码中,他们有一个进行重命名的函数:

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

关于javascript - 如何设置连接多方上传文件的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41464011/

相关文章:

javascript - 在 Yii 中将 registerScript(带有 PHP 变量)与 registerPackage 混合使用

node.js - 用于 NodeJS 应用程序的 Hazelcast 与 Redis(或 RedisLabs)

mysql - NodeJS Sequelize 时间戳已禁用,但仍然出现未知列 'createdAt' 错误

javascript - Express.js、Passport.js 和 SockJS : How to attach user socket to deserializeUser

javascript - 使用 javascript 将字符串数组转换为字段名称

javascript - 在 ExtJS 4 容器/面板中渲染图表

javascript - 将变量传递给自定义 Svelte Web 组件

arrays - 在 Pug 中迭代多个数组

node.js - 未请求的 Socket.IO 连接

database - session 存储和数据库有什么区别