m0_71295326 2023-05-06 20:38 采纳率: 0%
浏览 16

关于Multerjs问题


    const upload = multerConfig.single('userPic')   
        upload(req, res, (err) => {        
            if (err) {
                reject(err)
            }
            else {
                resolve(updateBaseUrl + imgPath + req.file.filename)
            }
        })

有人知道为什么upload()里面的代码为什么执行不了吗?我在本地widow环境时是可以正常运行的。放到云服务器中linux环境可以正常存储文件,但是upload()之后的代码就执行不了,导致服务器无响应
下面是完整代码

//multerConfig.js

const multer = require('multer');
const md5 = require('md5')
const path = require('path');
const { error } = require('console');

const resolve = (dir) => {
    return path.join(__dirname, './', dir)
}
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        // 3.1.1 允许图片上传
        try {
            if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
                cb(null, resolve('../uploads/infosPic'))
            } else {
                // 3.1.2 限制其他文件上传类型
                cb(null, new Error('cuowu'))
            }
        }
        catch {
            req.cc(error)
        }

    },
    //  3.2 存储名称
    filename: function (req, file, cb) {
        try {
            let fileFormat = (file.originalname).split(".");
            cb(null, md5(+new Date()) + "." + fileFormat[fileFormat.length - 1]);
        }
        catch {
            req.cc(error)
        }
    },

});

const multerConfig = multer({
    storage: storage,
});

// 5. 导出配置好的multerConfig
module.exports = multerConfig;


//修改头像
exports.updateUserpic = async (req, res) => {
    const updateBaseUrl = "http:/*****" // 上传到服务器地址
    const imgPath = "/api/img/infosPic/" // 上传到服务器的虚拟目录
    new Promise((resolve, reject) => {
        const upload = multerConfig.single('userPic')   
        upload(req, res, (err) => {        
            if (err) {
                reject(err)
            }
            else {
                resolve(updateBaseUrl + imgPath + req.file.filename)
            }
        })
    }).then(imgUrl => {
        const updataSql = `update userinfo set userpic = ? where id = ?`
        const selectSql = `select userpic from userinfo where id = ?`
        //查询到原头像的地址,保存到OldUserPic中
        let OldUserPic
        db.query(selectSql, req.user.id, (err, results) => {
            if (err) {
                return req.cc(err)
            }
            if (results.length != 1) {
                return req.cc('原头像地址获取失败')
            }
            else {
                OldUserPic = results[0]
            }
        })
        //将数据库用户信息修改
        db.query(updataSql, [imgUrl, req.user.id], (err, results) => {
            if (err) {
                return req.cc(err)
            }
            if (results.affectedRows !== 1) {
                return req.cc('修改失败!请稍后重试!')
            }
            else {
                const regex = /infosPic\/(.*)/;
                const match = OldUserPic.userpic.match(regex)
                if (match) {
                    fs.unlink(resolve('../uploads/infosPic/' + match[1]), (err) => {
                        console.log(err);
                    })
                }
                //将地址传给客户端
                res.send({
                    imgUrl,
                    status: 0,
                    message: "修改成功!"
                })
  • 写回答

1条回答 默认 最新

  • 你的兔子 2023-05-08 15:24
    关注

    针对你的问题结合chatgpt知识库请参考以下内容:
    根据你提供的代码片段,以下是我能看到的一些潜在问题及解决方案:

    1. multerConfig.js 中,你通过相对路径指定了文件存储位置。然而,在 Linux 系统上,相对路径的起始点可能有所不同。建议修改为绝对路径,并确保该目录存在、可写。

    2. 建议在上传成功时增加响应的 http 状态码和信息,如 res.status(200).send('upload success'); 等。这能帮助开发者更快地定位错误。

    3. exports.updateUserpic 函数中,你查询了更新前的用户头像地址,但是你没有等到查询结果就去修改数据库了。这可能导致数据不一致或更新失败。建议将数据库更新操作放在查询操作后面。

    4. 代码片段缺失了最后一个 fs.unlink() 方法中的闭合括号()),这可能会影响程序的正确性。请确保代码的准确性。

    根据你提供的信息,无法确定你遇到的问题是什么。如果上述方法没有解决你的问题,请在代码执行过程中逐一排查错误,并注意查看服务器日志以获取更多的信息。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月6日

悬赏问题

  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据
  • ¥15 关于树的路径求解问题
  • ¥15 yolo在训练时候出现File "D:\yolo\yolov5-7.0\train.py"line 638,in <module>
  • ¥30 戴尔inspiron独显直连
  • ¥15 进行一项代码设计遇到问题
  • ¥15 Mutisim中关于74LS192N计数器芯片设计(计数器)
  • ¥50 fastadmin后台无法删除文件
  • ¥15 oracle查询Socket read timed out错误