为了账号安全,请及时绑定邮箱和手机立即绑定

通过ajax发送图像到multer

通过ajax发送图像到multer

LEATH 2021-11-04 17:46:22
我正在使用 Multer 将图像文件上传到我的节点服务器,它总是返回给我 undefined 使用 ajax 发送图像。阿贾克斯:image = $("#input-file-img").val()                const data = new FormData();                 data.append("image", image);                 $.ajax({                    url: '/uploadfile/' + userName,                    method: 'POST',                    async: false,                    processData: false ,                    contentType: false,                    data: data                })上传.jsvar storage = multer.diskStorage({  destination: function (req, file, cb) {    cb(null, 'uploads')  },  filename: function (req, file, cb) {    cb(null, file.originalname)  }})var upload = multer({ storage: storage })router.post('/uploadfile/:userName', upload.single('image'), async (req, res, next) => {  let user = await User.findOne({ userName: req.params.userName })  let file = req.file  let fileName = file.filename  let path = variables.kepler + 'uploads/' + fileName  user.image = path  await user.save()  if (!path) {    const error = new Error('Please upload a file ...')    error.httpStatusCode = 400    return next(error)  }  if (path) {    return res.status(200).send({      status: '200',      message: 'Operation completed successfully ...',      data: user,      path    })  }})我用控制台检查了图像值,它显示 C:\fakepath\Capture d'écran de 2019-09-19 11-33-59.png'将不胜感激任何帮助。
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

解决了!!!

通过获取价值

image = $("#input-file-img").val()

这意味着我正在将类型字符串作为文件发送

所以我不得不把它改成

image = $('#input-file-img')[0].files[0]

一切都很好


查看完整回答
反对 回复 2021-11-04
?
慕森卡

TA贡献1806条经验 获得超8个赞

我认为你的服务器端代码很好,如果我修改客户端代码如下,一切正常,我们最终在 /uploads 文件夹中得到图像:


function base64toBlob(base64, mimeType) {

    const bytes = atob(base64.split(',')[1]);

    const arrayBuffer = new ArrayBuffer(bytes.length);

    const uintArray = new Uint8Array(arrayBuffer);

    for (let i = 0; i < bytes.length; i++) {

        uintArray[i] = bytes.charCodeAt(i);

    }

    return new Blob([ arrayBuffer ], { type: mimeType });

}


function submitForm() {         

    const imgRegEx = /^data:(image\/(gif|png|jpg|jpeg))/;

    const imageData = $('#input-file-img').attr('src');

    const mimeType = imgRegEx.exec(imageData)[1];

    const blob = base64toBlob(imageData, mimeType);


    const fileExt = mimeType.replace("image/", "");

    const fileName = "test-image." + fileExt; // Change as appropriate..


    const data = new FormData();

    data.append("image", blob, fileName);


    $.ajax({

        url: '/uploadfile/' + userName,

        method: 'POST',

        async: false,

        processData: false ,

        contentType: false,

        data: data

    })

}


查看完整回答
反对 回复 2021-11-04
  • 2 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信