Node.js 使用NodeJS Multer模块上载Jpg文件时的格式问题

Node.js 使用NodeJS Multer模块上载Jpg文件时的格式问题,node.js,post,jpeg,multer,Node.js,Post,Jpeg,Multer,我正在使用Multer将jpg文件从Postman上传到node.js后端 我假设“上传”进展顺利,因为在POST请求之后,图像位于正确的位置,具有正确的名称和大小 不幸的是,当我试图打开图像文件时,它没有以jpg图像的形式打开,即使扩展名是.jpg 我使用了checkFileType网站,显然,上传后文件类型变成了应用程序/八位字节流 我没有在请求中指定任何标题 下面是节点API端的代码 var localWorkLocation = '/Users/noste/CarFixer/Pict

我正在使用Multer将jpg文件从Postman上传到node.js后端

我假设“上传”进展顺利,因为在POST请求之后,图像位于正确的位置,具有正确的名称和大小

不幸的是,当我试图打开图像文件时,它没有以jpg图像的形式打开,即使扩展名是.jpg 我使用了checkFileType网站,显然,上传后文件类型变成了应用程序/八位字节流

我没有在请求中指定任何标题

下面是节点API端的代码

var localWorkLocation = '/Users/noste/CarFixer/Pictures/';

exports.createBinary = function (req, res) {
        var location = localWorkLocation + req.params.platenumber;
        var storageOptions = multer.diskStorage({
                        destination: function (req, file, callback) {
                            mkdirp(location, err => callback(err, location));
                            callback(null, location);
                        },
                        filename: function (req, file, callback) {
                            //if (!file.originalname.match(/\.(jpg|jpeg|png)$/)) {
                            //        return callback(new Error('Only image files are allowed!'), false);
                            //}
                            callback(null, file.originalname);
                        },
        });
        var upload = multer({storage : storageOptions}).single('picture');

        upload(req, res, function(err){
            console.log(req.file);
            if(err) {
                return res.end(err.message);
            }

            res.send(req.file);
        });
};
我试图上传一个.txt文件,上传后仍然可读。
是否有一个地方需要我指定我想要保留jpg格式

这是您需要的存储配置。。根据您的代码更改命名

 var path = require('path');
 var storage = multer.diskStorage({
            destination: function(req, file, callback) {
                callback(null, './uploads');
            },

            filename: function(req, file, callback) {
                var fname = file.fieldname + '-' + Date.now() + path.extname(file.originalname);

                callback(null, fname);

            }
        });

这里还有另一个答案,这是您需要的存储配置。。根据您的代码更改命名

 var path = require('path');
 var storage = multer.diskStorage({
            destination: function(req, file, callback) {
                callback(null, './uploads');
            },

            filename: function(req, file, callback) {
                var fname = file.fieldname + '-' + Date.now() + path.extname(file.originalname);

                callback(null, fname);

            }
        });

这是另一个答案

谢谢你的回答。它创建了两个文件,但其中一个包含图片。@NicolasOste应该上载一个文件。。如果它与u一起工作,请接受答案并投票:事实上,问题是:如果我没有在文件名中添加日期时间,第一个正确包含图片的文件将被第二个文件覆盖,因为它们具有相同的名称。我将文件名设置为一个特定的id,以便以后检索该文件。你知道我怎么才能只储存第一个吗?还是为了保护它不被覆盖?@NicolasOste你必须更改名称,使其不会重复(或至少不会重复),即使你可以通过一个简单的检查功能来解决这个问题。。因此,在文件名中添加datetime以防止覆盖您的答案。它创建了两个文件,但其中一个包含图片。@NicolasOste应该上载一个文件。。如果它与u一起工作,请接受答案并投票:事实上,问题是:如果我没有在文件名中添加日期时间,第一个正确包含图片的文件将被第二个文件覆盖,因为它们具有相同的名称。我将文件名设置为一个特定的id,以便以后检索该文件。你知道我怎么才能只储存第一个吗?还是为了保护它不被覆盖?@NicolasOste你必须更改名称,使其不会重复(或至少不会重复),即使你可以通过一个简单的检查功能来解决这个问题。。因此,在文件名中添加datetime以防止覆盖