gpt4 book ai didi

reactjs - 通过 api 路由/强大的 next.js 文件上传 - 不起作用

转载 作者:行者123 更新时间:2023-12-03 14:30:09 25 4
gpt4 key购买 nike

我在通过 api 路由上传文件时遇到了麻烦。

在客户端,我像这样提交文件:

 onFormSubmit = (e) => {
e.preventDefault() // Stop form submit

this.fileUpload(this.state.file).then((response) => {
console.log('rD', response.data)
})
}

onFileChange = (e) => {
this.setState({ file: e.target.files[0] })
}

fileUpload = (file) => {
const url = '/api/mail/upload'
const formData = new FormData()
formData.append('file', file)
const config = {
headers: {
'X-CSRF-TOKEN': this.props.session.csrfToken
}
}
return axios.post(url, formData, config)
}

我对 /api/mail/upload 的请求如下所示:

Request Headers:
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,de-DE;q=0.8,de;q=0.7
Connection: keep-alive
Content-Length: 1331
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBlNt6z8t4rGZT0x6
Cookie: abc123
Host: localhost:3000
Origin: http://localhost:3000
Referer: http://localhost:3000/new
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36
X-CSRF-TOKEN: abc123

Form Data:
file: (binary)

然后在路由(/api/mail/upload)中,我尝试使用 formidable 来解析表单数据,最后对文件执行一些操作。

我已确保通过在 api 路由文件底部包含以下内容来禁用内置正文解析器:

export const config = {
api: {
bodyParser: false
}
}

^^ 这是正确的方法,对吗?

最后,在 api route ,我尝试了很多不同的方法,但目前以下是我期望的工作,但事实并非如此。

module.exports = async (req, res) => {
const form = new formidable.IncomingForm()

form.parse(req, (err, fields, files) => {
if (err) return reject(err)
console.log(fields, files)
res.status(200).json({ fields, files })
})
// if I console.log(form) here - I can see the request details, so it seems to be picking that up
}

这在服务器端和客户端都不会生成任何输出,我希望 console.log(fields, files) 在服务器端输出文件名,等等

有人知道我错过了什么吗?

最佳答案

您所需要的只是禁用 Next.js 内置正文解析器:https://nextjs.org/docs/api-routes/api-middlewares#custom-config

以下是工作示例:

// Backend
import formidable from 'formidable';

export const config = {
api: {
bodyParser: false,
},
};

export default async (req, res) => {
const form = new formidable.IncomingForm();
form.uploadDir = "./";
form.keepExtensions = true;
form.parse(req, (err, fields, files) => {
console.log(err, fields, files);
});
};

https://gist.github.com/agmm/da47a027f3d73870020a5102388dd820

关于reactjs - 通过 api 路由/强大的 next.js 文件上传 - 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60020241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com