将 SVG 上传到 AWS S3 存储桶并尝试通过 URL 访问它后文档为空
Document Empty after uploading a SVG to AWS S3 bucket and trying to access to it via URL
所以,我正在尝试将我的网络图片上传到 s3 存储桶中。我通过 HTTP 请求将它们发送到 AWS 中的 lambda。它正确执行并且图像出现在我的存储桶中,但是当我尝试在我的前端提供它时它没有加载,如果我在我的浏览器中打开 url 我得到这个错误:
该页面包含以下错误:
第 1 行第 1 列错误:文档为空
下面是第一个错误之前的页面呈现。
我的 lambda 是在 nodejs v12 中开发的,我使用的是 aws-sdk ^2.765.0。服务器端的代码是这样的:
let buf = new Buffer.from(image.replace(/^data:image\/\w+;base64,/, ""),"base64");
let type = image.split(";")[0].split("/")[1];
let params = {
Bucket: process.env.BUCKET_IMAGE,
Key: `${name.toUpperCase()}.${type.replace('+xml','')}`,
Body: buf,
ContentEncoding: "base64",
ContentType: `image/${type}`,
ACL: 'public-read'
};
s3.upload(params,function(err,resp){});
知道哪里出了问题吗?前面的代码可以完美地处理任何 jpeg/png 图像。
提前致谢。
问题出在替换中使用的正则表达式。如果调试它,您将看到在 svg 的情况下,它将是“data:image/svg+xml...”,正则表达式将不匹配,因此不会进行任何替换。
中间的 '+' 符号没有被 \w 覆盖,正如你所指出的,它确实适用于其他扩展,如 jpeg...
image.replace(/^data:image\/[a-zA-Z+]+;base64,/, '')
在这种情况下就可以了。
完成后,缓冲区和编码将按预期工作。
所以,我正在尝试将我的网络图片上传到 s3 存储桶中。我通过 HTTP 请求将它们发送到 AWS 中的 lambda。它正确执行并且图像出现在我的存储桶中,但是当我尝试在我的前端提供它时它没有加载,如果我在我的浏览器中打开 url 我得到这个错误:
该页面包含以下错误: 第 1 行第 1 列错误:文档为空 下面是第一个错误之前的页面呈现。
我的 lambda 是在 nodejs v12 中开发的,我使用的是 aws-sdk ^2.765.0。服务器端的代码是这样的:
let buf = new Buffer.from(image.replace(/^data:image\/\w+;base64,/, ""),"base64");
let type = image.split(";")[0].split("/")[1];
let params = {
Bucket: process.env.BUCKET_IMAGE,
Key: `${name.toUpperCase()}.${type.replace('+xml','')}`,
Body: buf,
ContentEncoding: "base64",
ContentType: `image/${type}`,
ACL: 'public-read'
};
s3.upload(params,function(err,resp){});
知道哪里出了问题吗?前面的代码可以完美地处理任何 jpeg/png 图像。
提前致谢。
问题出在替换中使用的正则表达式。如果调试它,您将看到在 svg 的情况下,它将是“data:image/svg+xml...”,正则表达式将不匹配,因此不会进行任何替换。 中间的 '+' 符号没有被 \w 覆盖,正如你所指出的,它确实适用于其他扩展,如 jpeg...
image.replace(/^data:image\/[a-zA-Z+]+;base64,/, '')
在这种情况下就可以了。
完成后,缓冲区和编码将按预期工作。