提问人:ullas kunder 提问时间:11/17/2023 最后编辑:ullas kunder 更新时间:11/17/2023 访问量:30
探索大小限制:API 响应 Base64 可查看,最大 1 MB,呈现挑战
Exploring Size Limitations: API Response Base64 Viewable Up to 1 MB, Rendering Challenges
问:
我目前在尝试上传较大图像(大于 1 MB)时在 Next.js 应用程序中面临挑战。虽然该应用程序在处理较小图像时运行流畅,但引入较大图像会带来困难。
以前,该问题会导致浏览器控制台错误,特别是 GET net:ERR_INVALID_URL 错误。更新后,该错误已得到解决,但出现了一个新的挑战——无法预览大尺寸的 base64 图像。
我在代码中实现了一个基本的工作流程:
- 上传图像 => POST 到 api/ 端点 => 接收图像响应 => 在前端显示响应作为预览。
环境:
- 节点:18.16.1
- 下一步: 14.0.2
- 反应:18.2.0
- 反应多元:18.2.0
虽然可以使用其他图像服务或 multer 等替代方案,但我目前的重点是了解为什么会出现此问题。
CodeSandbox:沙盒链接
主要目标:
- 从 Next.js API 成功进行映像 POST [已检查]
- 从 API 接收图像作为前端的响应,而不会出现错误 [已选中]
- 探索从 Next.js API POST 响应渲染图像或预览的改进方法。
更新:
我已经对其中的函数进行了调整,以避免GET错误:getImageBuffer
api/upload/route.ts
async function getImageBuffer(base64String: string): Promise<Buffer> {
// Decode the base64 string
return Buffer.from(base64String.split(",")[1], "base64");
}
但是,另一个观察结果是,虽然 API 响应 base64 在最大 1 MB 内可见,但超过此限制,字符串大小会变得太大,从而阻碍完整的图像渲染。
进一步查询: 我也对优化图像预览感兴趣。从 API 获取 base64 图像响应以在前端显示后,有没有办法在不影响质量的情况下呈现较小尺寸的预览(小于 1 MB)以加快加载速度?
答:
0赞
cbreezier
11/17/2023
#1
您将图像作为 base64 编码的图像数据 url 返回。
这意味着当您上传 1MB 的图像时,您将返回一个带有...其中大约有 130 万个字符。
虽然规范中没有对最大 URL 长度的技术限制,但浏览器通常有硬性限制。
几年前,常见的建议是将 URL 中的字符保持在 2k 个字符以下。老实说,我很惊讶 Chrome 在告诉您 URL 无效之前获得了接近 100 万个字符。
评论
0赞
ullas kunder
11/17/2023
我知道它的负载太大了,我没有找到任何解决方案或替代的最佳方法来完成这项任务,如果可能的话,从头开始
1赞
cbreezier
11/18/2023
您需要返回包含(或您正在使用的任何图像类型)的响应,而不是 base64 编码的字符串。使用实际图像进行响应将使用更少的带宽(base64 使用 4 个字节来表示 3 个字节的原始数据),并为您省去很多麻烦。Content-Type: image/png
1赞
cbreezier
11/18/2023
对于图像大小调整,请查看无服务器解决方案的 aws.amazon.com/solutions/implementations/...,或者如果您想自己调整图像大小,请仅使用底层开源库。sharp
评论