【问题标题】:renaming uploaded file nodejs and multer重命名上传的文件nodejs和multer
【发布时间】:2017-07-07 20:26:22
【问题描述】:

Multer 中的文件名问题

我正在使用 express.js 和 multer 将图像上传到服务器。我的行为是这样的:

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');

但问题是永远不会更改文件名。 我的上传处理程序:

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});
            });
        });
    }
}

文件保存到正确的目录,名称为“blobid0.jpeg”、“blobid1.png”等... 我有什么错?

【问题讨论】:

  • 输出对象为:{ file: { name: 'blobid0.jpg', data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 02 01 00 48 00 48 00 00 ff ed 01 b8 50 68 6f 74 6f 73 68 6f 70 20 33 2e 30 00 38 42 49 4d 03 e9 00 00 00 00 00 78 ... >, encoding: '7bit', mimetype: 'image/jpeg', mv: [Function: mv] } }

标签: node.js express multer


【解决方案1】:

这是我将任何文件(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);
        });
    });

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 2017-10-28
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多