AWS S3 上传的图像已部分加载
AWS S3 Uploaded Image is Partially Loaded
我正在尝试使用 aws-sdk 包从我的 Node.js 项目的文件结构将本地存储的图像上传到我的 AWS S3 存储桶并且能够成功上传它,但是,上传的图像是图像的部分渲染版本。当我查看 AWS 为图像创建的 URL 时,只有前 1% (12kb) 是可见的。我已将文件注销到控制台并确保它是我认为的那样,而且确实如此。但由于某种原因,当我将它上传到 S3 时,它是图像的截断/截断版本。
所有的教程看起来都很简单,但似乎没有人提到这个问题。我已经努力了几个小时,但似乎没有任何效果。我已经尝试了所有我能在网上找到的东西,比如:
- 使用 fs.createReadStream(fileName) 而不是仅使用文件缓冲区,但这不起作用(来自 Image file cut off when uploading to AWS S3 bucket via Django and Boto3)
- 将缓冲区转换为 base64 字符串并以这种方式发送
- 添加 ContentLength 参数
- 将 ContentType 添加为图像的确切类型
相关代码如下:
const aws = require("aws-sdk")
const { infoLogger } = require("./logger")
async function uploadCoverImage() {
try {
aws.config.update({
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
region: "us-east-2",
})
const s3 = new aws.S3()
fs.readFile("cover.jpg", (error, image) => {
if (error) throw error
const params = {
Bucket: process.env.BUCKET_NAME,
Key: "cover.jpg",
Body: image,
ACL: "public-read",
ContentType: "image/jpg",
}
s3.upload(params, (error, res) => {
if (error) throw error
console.log(`${JSON.stringify(res)}`)
})
})
} catch (error) {
infoLogger.error(`Error reading cover file: ${JSON.stringify(error)}`)
}
}
module.exports = uploadCoverImage
我发现它在图像通过 fs.createReadStream() 在我的代码库的不同部分完成下载之前上传,这就是它在 S3 中部分加载的原因。我从来没有注意到,因为我只在我的本地文件系统中看到过完全加载的图像。
我正在尝试使用 aws-sdk 包从我的 Node.js 项目的文件结构将本地存储的图像上传到我的 AWS S3 存储桶并且能够成功上传它,但是,上传的图像是图像的部分渲染版本。当我查看 AWS 为图像创建的 URL 时,只有前 1% (12kb) 是可见的。我已将文件注销到控制台并确保它是我认为的那样,而且确实如此。但由于某种原因,当我将它上传到 S3 时,它是图像的截断/截断版本。
所有的教程看起来都很简单,但似乎没有人提到这个问题。我已经努力了几个小时,但似乎没有任何效果。我已经尝试了所有我能在网上找到的东西,比如:
- 使用 fs.createReadStream(fileName) 而不是仅使用文件缓冲区,但这不起作用(来自 Image file cut off when uploading to AWS S3 bucket via Django and Boto3)
- 将缓冲区转换为 base64 字符串并以这种方式发送
- 添加 ContentLength 参数
- 将 ContentType 添加为图像的确切类型
相关代码如下:
const aws = require("aws-sdk")
const { infoLogger } = require("./logger")
async function uploadCoverImage() {
try {
aws.config.update({
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
region: "us-east-2",
})
const s3 = new aws.S3()
fs.readFile("cover.jpg", (error, image) => {
if (error) throw error
const params = {
Bucket: process.env.BUCKET_NAME,
Key: "cover.jpg",
Body: image,
ACL: "public-read",
ContentType: "image/jpg",
}
s3.upload(params, (error, res) => {
if (error) throw error
console.log(`${JSON.stringify(res)}`)
})
})
} catch (error) {
infoLogger.error(`Error reading cover file: ${JSON.stringify(error)}`)
}
}
module.exports = uploadCoverImage
我发现它在图像通过 fs.createReadStream() 在我的代码库的不同部分完成下载之前上传,这就是它在 S3 中部分加载的原因。我从来没有注意到,因为我只在我的本地文件系统中看到过完全加载的图像。