在使用multer在node.js(express)中上传后保留图像文件名称和扩展名 [英] Retaining image file name and extension after upload in node.js (express) using multer

查看:3656
本文介绍了在使用multer在node.js(express)中上传后保留图像文件名称和扩展名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 <!doctype html>< html> <身体GT; < form action =/ uploadmethod =POSTenctype =multipart / form-data> < input type ='file'name =image> <峰; br> < input type =submitvalue =submit> < /形式> < / body>< / html>  

$ b

  var express = require('express'); 
var router = express.Router();
var multer = require('multer');
var upload = multer({dest:'uploads /',
filename:function(req,file,cb){
cb(null,file.fieldname +' - '+ Date。 now())
}});

router.post('/ upload',upload.single('image'),function(req,res){
res.send(Uploaded);
});
module.exports = router;

我有这个使用multer模块上传图片的基本代码。但是,当文件上传时,它会生成一些随机的名字,甚至摆脱文件扩展名。它只是说类型'文件'。那么怎样才能保持图像名称的扩展名。

解决方案

当您上传文件(使用multer.single方法)时,获取文件数据

$ $ p $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $

它是在属性originalname,mimetype,path和其他的对象。检查所有文档: https://github.com/expressjs/multer



如何保持图像名称和扩展名?b / b
$ b a)重命名上传的文件使用req.file中的数据(不喜欢它)
$ b b)存储文件数据(req.file)在数据库中

编辑关于重命名:
当所有下载的文件转到一个目录时,并且您将名称更改为原始名称,则可能存在冲突 - 可能存在具有相同名称的文件。因此,当你选择这种方式mayby你应该把文件移动到单独的目录。接下来的事情:原始文件名可能有侮辱性文字或非标准的字符(我不知道是否可能是安全性)或者很长等。



好的,如何重命名?
我们可以使用快递包fs https://nodejs.org/api/fs.html
和方法:

  fs.rename(oldPath,newPath,callback)

  fs.renameSync(oldPath,newPath) 


<!doctype html>
<html>

    <body>
        <form action="/upload" method="POST" enctype="multipart/form-data">
            <input type='file' name="image">
            <br>
            <input type="submit" value="submit">
        </form>
   </body>

</html>

var express = require('express');
var router = express.Router();
var multer  = require('multer');
var upload = multer({ dest: 'uploads/',
    filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
} });

router.post('/upload', upload.single('image'), function(req, res){
    res.send("Uploaded");
});
module.exports = router;

I have this basic code that uploads an image using the multer module. But when the file is uploaded it generates some random name and even gets rid of the file extension. It just says type 'file'. So how can I keep the image name with the extension.

解决方案

when you upload file (using multer.single method), you get file data in

req.file

it is object which have in properties originalname, mimetype, path and others. Check docs for all : https://github.com/expressjs/multer

But dont trust mimetype.

How keep image name and extension?

a) rename uploaded file using data in req.file (dont like it)

b) store file data (req.file) in db

edit about rename: when all downloaded files goes to one directory, and you change names to orginal, there may be conflicts - there may exists files with same names. Therefore, when you choose that way mayby you should move files to separate directories.

Next thing: Orginal file names may have insulting words or non standard chars (i dont know if it may be security isue) or be very long etc.

ok, how to rename? we can use express package fs https://nodejs.org/api/fs.html and methods:

fs.rename(oldPath, newPath, callback)

or

fs.renameSync(oldPath, newPath)

这篇关于在使用multer在node.js(express)中上传后保留图像文件名称和扩展名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆