Abh*_*shi 6 javascript node.js express
我有一个页面,我想接受一个文件和3-4个用户输入,我能够使用connect-multiparty中间件实现这一点,但上传文件的名称是一些乱码,正确的扩展和上传的文件内容也是正确.
我想要实现以下目标
我在网上搜索但找不到任何有效的例子.我的完整代码如下
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;
Run Code Online (Sandbox Code Playgroud)
复制后您必须使用 重命名该文件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);
}
Run Code Online (Sandbox Code Playgroud)
我对他们的代码做了一些修改,这样我就可以像 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);
Run Code Online (Sandbox Code Playgroud)
他们强烈建议您将文件保存在临时文件夹中,以防止服务器上出现 DoS。
https://github.com/pillarjs/multiparty/issues/64
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |