【问题标题】:Uploading file backend express and frontend react using multer missing stream property使用multer缺少流属性上传文件后端快递和前端反应
【发布时间】:2021-08-04 18:25:32
【问题描述】:

我正在尝试成功上传文件(图像),但出现问题,因为文件似乎已移动到正确的目录,但它的大小为 0,就好像它实际上没有任何内容一样,当我尝试打开它..它失败了。我想我可能缺少“流”,因为当我 console.log 后端上的文件时没有流属性..我还在控制台中收到一个错误,说““源”参数必须是函数类型或Stream、Iterable 或 AsyncIterable 的实例。收到未定义"

我的前端:

const UploadPoster = ({books_id}) => {
  const [file, setFile] = useState();
  
  const send = () => {
    const data = new FormData();
    data.append('file', file);

    Axios.post(`${HOST}/books/${books_id}/upload`, data, {
      headers: {
        Authorization: `Bearer ${localStorage.getItem('token')}`
      },
    })
    .then(res => console.log(res))
    .catch(err => console.log(err));
    
    history.go(0)
  };

  const history = useHistory();
  
  return (
    <>
      <form action="#">
        <div className="flex">
        <label htmlFor="file">Update book cover:</label>
        <input type="file" id="file" onChange={event => {
          const file = event.target.files[0];
          setFile(file);
        }} />
      </div>
    </form>
    <Button onClick={send}>Upload</Button>
    </>
  )
}

我的后台:

    .post('/:id/upload', authMiddleware, loggedUserGuard, roleMiddleware(userRole.Admin), upload.single('file'), async (req, res) => {
      const {file} = req;

      await pipeline(
          file.stream,
          fs.createWriteStream(`${__dirname}/../../../front_end/public/posters/${req.file.originalname}`),
      );

      res.send('File uploaded as ' + req.file.originalname);
    })

【问题讨论】:

    标签: javascript reactjs express path multer


    【解决方案1】:

    您需要将要发送的图像文件附加到 JSON 请求正文。

    你可以在这里参考这篇文章:

    Javascript: Upload File

    【讨论】:

    • 即使我把 Axios 改成 fetch 并按照你说的去做...` fetch(${HOST}/books/${books_id}/upload, { method: 'POST', headers: { Authorization: Bearer ${localStorage.getItem('token')} }, body : data })` ... 仍然做同样的事情.. 文件被传输,但它的大小为 0,就好像它没有内容一样
    • 尝试在后端记录文件并告诉我们它打印的内容。
    • 这就是文件在后端打印的内容{ fieldname: 'file', originalname: 'nineteen-eighty-four.jpg', encoding: '7bit', mimetype: 'image/jpeg', buffer: &lt;Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 0b 08 08 08 08 08 0b 08 08 0b 10 0b 09 0b 10 13 0e 0b 0b 0e 13 16 12 12 13 ... 284783 more bytes&gt;, size: 284833 } 我猜它缺少诸如临时路径和流之类的东西,但我不知道为什么..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2021-01-13
    • 2021-10-19
    相关资源
    最近更新 更多