【发布时间】:2022-11-15 01:49:42
【问题描述】:
我正在尝试在 Next.js 应用程序中裁剪图像,将其发送到应用程序中的 API 路由,最后发送到应用程序外部的 API 端点。如果我绕过 API 路由,它可以正常工作,但在通过它时却不行。图像数据不再正确,无法处理。
客户端(Next.js)-->API路由(Next.js)-->API 端点(外部)
客户端(Next.js)- fetch 使用 FormData 通过 POST
async function handleSave(image: Blob) {
const file = new File([image], 'avatar.png', { type: 'image/png' })
const data = new FormData()
data.append('imageFile', file)
const response = await fetch(`/api/users/${userId}/media/avatar`,
{
body: data,
method: 'POST',
}
)
// const response = await fetch (`https://localhost:1337/user/${userId}/media/avatar`, {
// method: 'POST',
// headers: {
// "Authorization": `Bearer <JWT token>`,
// },
// body: data
// })
if (response.ok) {
// handle
}
}
注释掉的 fetch 是我测试直接调用外部 API 端点的地方,这工作正常。
API 路由 (Next.js)- 从客户端获取请求并将其转发到外部 API 端点。
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
await cors(req, res)
const { userId } = req.query;
const { accessToken } = await getToken({ req, secret });
const response = await fetch(`${process.env.API_HOST}/user/${userId}/media/avatar`, {
method: 'POST',
headers: {
"Authorization": `Bearer ${accessToken}`,
"Content-Type": req.headers["content-type"]
},
body: req.body
})
try {
const json = await response.json();
console.log(json)
}
finally { }
res.end()
}
API 端点(外部)
- ASP.Net Core Web API
- 请求应该是
multipart/form-data - 请求应包含
imageFile中的图像并映射到IFormFile
一旦请求通过 API 路由并发送到外部 API,图像流就不再有效。我可以看到 IFormFile 对象已经拾取了 imageFile OK 并获得了相关数据。
当我绕过 Next.js API 路由时,上传工作正常,我注意到 IFormFile 对象长度要小得多。
通过 Next.js API 路由很重要,因为它处理将访问令牌传递给外部 API 并且不打算公开该 API。
我看过 Create upload files api in next.js,但我不确定 formidable 如何/是否适合这种情况?
【问题讨论】:
标签: javascript node.js asp.net-core asp.net-web-api next.js