javascript - 由于多部分 : Boundary not found 无法加载文件

标签 javascript node.js multer

我正在尝试从桌面上传图像,但找不到多部分边界的错误。如何设置上传图片的边界?第一次上传图片,请指教。

用户上传图片时的html事件监听

document.getElementById('image-file').addEventListener('change', 
    async (e) => {
        const file = e.target.files[0]
        const bodyFormData = new FormData()
        bodyFormData.append('image', file)
        showLoading()
        const data = await uploadProductImage(bodyFormData)
        hideLoading()
        if (data.error) {
          showMessage(data.error)
        } else {
          showMessage('Image Uploaded Successfully.')
          console.log(data)
          document.getElementById('image').value = data.image
        }
      })
  },

api.js - 发布操作

export const uploadProductImage = async (bodyFormData) => {
  const options = {
    method: 'POST',
    body: bodyFormData,
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  }
  try {
    const response = await fetch(`${apiUrl}/api/uploads`, options)
    const json = await response.json()
    if (response.status !== 201) {
      throw new Error(json.message)
    }
    return json
  } catch (err) {
    console.log('Error in upload image', err.message)
    return { error: err.message }
  }
}

uploadroute.js - 用于上传图片

import express from 'express'
import multer from 'multer'

const storage = multer.diskStorage({
  destination(req, file, cb) {
    cb(null, 'uploads/')
  },
  filename(req, file, cb) {
    cb(null, `${Date.now()}.png`)
  },
})

const upload = multer({ storage })
const router = express.Router()

router.post('/', upload.single('image'), (req, res) => {
  res.status(201).send({ image: `/${req.file.path}` })
})

export default router

最佳答案

当您在前端使用 fetch 发送表单时,不要自己设置 Content-Type header 。如果这样做,它将没有表单边界,并且 multipart/form-data 请求将在后端被错误地解析。

您可以省略标题,因为浏览器会为您设置它,其中包括一个唯一的边界。例如:

  • 您的 header :Content-Type=multipart/form-data;
  • 浏览器的标题:Content-Type=multipart/form-data; boundary=------WebKitFormBoundaryg7okV37G7Gfll2hf--

在你的情况下:

const options = {
  method: 'POST',
  body: bodyFormData,
}
const response = await fetch(`${apiUrl}/api/uploads`, options)

关于javascript - 由于多部分 : Boundary not found 无法加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67996124/

相关文章:

javascript - React - Axios 正在将未定义的文件数据发送到 Node 服务器

node.js - (Express js 4 Multer) 在文件上传之前检查表单字段(如果为空)

javascript - php header 不适用于 ajax。 js重新加载的问题

javascript - 通过 JQuery 在选择中选择选项

javascript - JS中.getAttribute和数据集的区别

javascript - 为什么卡住的 "enum"变慢了?

node.js - Sequelize js 如何获得关联模型的平均值(聚合)

javascript - 命名回调函数表达式?

node.js - 使用 Docker 通过 kubernetes 部署 React 应用程序

javascript - 如何检查我的图像是否保存在 Heroku 服务器上