【问题标题】:Does req.body gives buffer data using Multer in NodeJs?req.body 是否在 NodeJs 中使用 Multer 提供缓冲区数据?
【发布时间】:2021-07-12 18:00:43
【问题描述】:

我正在从 react js 作为前端发送一个文件。我使用节点 js 作为后端来获取该文件。我正在使用 multer 将文件上传到我的数据库。但是当我控制台将我的文件记录为: “console.log(req.file)”它给我的缓冲区数据:

{
  fieldname: 'files',
  originalname: '2.JPG',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  buffer: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 60 00 60 00 00 ff e1 10 ee 45 78 69 66 00 00 4d 4d 00 2a 00 00 00 08 00 04 01 3b 00 02 00 00 00 0c 00 00 ... 44740 more bytes>,
  size: 44790
}

但我想获取文件,而不是缓冲区数据。谁能帮忙!

这是我的后端代码:

const express = require('express');
const cors = require('cors');
const multer = require('multer');

const app = express()

app.use(express.json());
app.use(cors())

app.post('/post', upload.single('files'), (req, res) => {
    console.log(req.file)
})

这是我的正面

const App = () => {
const [data, setdata] = useState();
const [name, setname] = useState()
const changeHandler = (e) => {
e.preventDefault()
setname(e.target.name)
setdata(e.target.files[0])
}
const submitData = async (e) => {
e.preventDefault()
const imageData = new FormData();
imageData.append('name', name)
imageData.append('files', data);

axios.post('http://localhost:8000/post', imageData)
.then((res) => console.log(res))
.catch((e) => console.log(e))
 }
 return (
 <>
 <form onSubmit={submitData} className="app">
 <input onChange={changeHandler} name="image" type="file" />
 <button type="submit">Submit</button>
 </form>
 </>
 );
}

【问题讨论】:

  • 你可以转换Buffer to file
  • 顺便说一句,我认为缓冲区是文件传输的唯一方式,它只是在 Browser/OS/NodeJS 中自动转换,它是一个内存存储,在文件写入磁盘之前
  • @MedetTleukabiluly 没错。这是唯一的方法。

标签: node.js axios


【解决方案1】:

您不能只发送字符串或整数值之类的图像文件。它确实像那样被转移。这是唯一的方法。您需要将其写入磁盘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多