简体   繁体   English

重命名上载的文件nodejs和multer

[英]renaming uploaded file nodejs and multer

problem with file name in Multer Multer中文件名的问题

i am using express.js and multer to upload images to server. 我正在使用express.js和multer将图像上传到服务器。 i act like this: 我是这样的:

var storage = multer.diskStorage({
        destination: function (req, file, callback) {
            callback(null, "../client/member/upload");
        },
        filename: function (req, file, callback) {
            console.log('1', 1);
            callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
        }
    });
    var upload = multer({ storage : storage}).single('userPhoto');

but the problem is that never file name changes. 但是问题是文件名永远不会更改。 my uploader handler: 我的上传程序处理程序:

function memberUpload(request, response) {

    var storage = multer.diskStorage({
        destination: function (req, file, callback) {
            callback(null, "../client/member/upload");
        },
        filename: function (req, file, callback) {
            console.log('1', 1);
            callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
        }
    });
    var upload = multer({ storage : storage}).single('userPhoto');

    var folderName = path.join(__dirname, '../', 'client/member/upload');

    if (!fs.existsSync(folderName)) {
        fs.mkdir(folderName, function (err) {
            if (err) {
                return response.status(500).send(err);
            }
            else {
                upload(request, response, function (err) {
                    if (err) {
                        return response.status(400)
                            .send('No files were uploaded.');
                    }
                    var sentFile = request.files.file,
                        fileName = (request.files.file && request.files.file.name) ? request.files.file.name : 'test';

                    sentFile.mv(path.join(__dirname, '../', 'client/member/upload/', fileName), function (err) {
                        mime.lookup(path.join(__dirname, '../', 'client/member/upload/', fileName));         // => 'text/plain'
                        if (err) {
                            return response.status(500)
                                .send(err);
                        }
                        response.send({'location': '../member/upload/' + fileName});
                    });
                });
            }
        });
    }
    else {
        upload(request, response, function (err) {
            if (err) {
                return response.status(400)
                    .send('No files were uploaded.');
            }
            var sentFile = request.files.file,
                fileName = (request.files.file && request.files.file.name) ? request.files.file.name : 'test';

            sentFile.mv(path.join(__dirname, '../', 'client/member/upload/', fileName), function (err) {
                mime.lookup(path.join(__dirname, '../', 'client/member/upload/', fileName));         // => 'text/plain'
                if (err) {
                    return response.status(500)
                        .send(err);
                }
                response.send({'location': '../member/upload/' + fileName});
            });
        });
    }
}

the file save into correct directory with name "blobid0.jpeg", "blobid1.png" and so on ... what is my fault? 该文件保存到正确的目录中,名称为“ blobid0.jpeg”,“ blobid1.png”等等……我的错是什么?

Here is my code for uploading any file(pdf, txt, png) to server.Hope this will help you. 这是我将任何文件(pdf,txt,png)上传到服务器的代码。希望对您有帮助。

exports.saveMedia = ((req, res) => {
        const storage = multer.diskStorage({
            destination: (req, file, callback) => {
                callback(null, (config.const.path.base + config.const.path.productReviewMedia));
            },
            filename: (req, file, callback) => {
                callback(null, Date.now() + '-' + file.originalname);

            }
        });

        const upload = multer({storage: storage}).any('file');

        upload(req, res, (err) => {
            if (err) {
                return res.status(400).send({
                    message: helper.getErrorMessage(err)
                });
            }
            let results = req.files.map((file) => {
                return {
                    mediaName: file.filename,
                    origMediaName: file.originalname,
                    mediaSource: 'http://' + req.headers.host + config.const.path.productReviewMedia + file.filename
                }
            });
            res.status(200).json(results);
        });
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM