上传流数据到 Amazon S3
Uploading stream data to Amazon S3
我正在尝试将 svg QR 码推送到我的节点应用程序上的 S3。
据我了解,我应该将缓冲区上传到 S3。当我检查 qrResult 时,我在任何地方都看不到。也许我从根本上误解了 writeStreams 的概念,以及如何将数据通过管道传输到 S3 上传,但我似乎无法弄清楚...
let fileName = 'qrCode'
let qrCode = Qr.image('The ultimate test', { type: 'svg' });
let output = fs.createWriteStream(fileName)
let qrResult = qrCode.pipe(output)
let s3bucket = new Aws.S3({
accessKeyId: env.AWS_ACCESS_KEY
secretAccessKey: env.AWS_SECRET,
Bucket: env.S3_BUCKET_NAME,
});
let params = {
Bucket: env.S3_BUCKET_NAME,
Key: fileName,
Body: qrResult,
};
s3bucket.upload(params, function (err, qrResult) {
if (err) {
console.log('error in callback');
console.log(err);
}
console.log('success');
console.log(qrResult);
});
您可能需要在参数中添加 ContentType 和 ACL,如下所示:
let params = {
Bucket: env.S3_BUCKET_NAME,
Key: fileName,
Body: qrResult,
ContentType: 'image/svg+xml',
ACL: 'public-read'
};
顺便说一句,我在你的代码中看不到 file
对象。
也使用 putObject
而不是 upload
,例如:
s3bucket.putObject(params...
Key表示二维码的名称,数据是二维码本身。
所以你可以定义一个创建参数的函数,像这样:
aws.config.update({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});
const s3 = new aws.S3({
params: {
Bucket: process.env.S3_BUCKET
}
const data = createParams(name,data);
s3.putObject(data, (err, response) => {....});
createParams(qrName, qrCode) {
let data = {
Key: file.name,
Body: file.data,
ContentType: 'image/svg+xml',
ACL: 'public-read'
}
return data
}
数据是您的写入流或您的 qrCode 的输出
我正在尝试将 svg QR 码推送到我的节点应用程序上的 S3。
据我了解,我应该将缓冲区上传到 S3。当我检查 qrResult 时,我在任何地方都看不到。也许我从根本上误解了 writeStreams 的概念,以及如何将数据通过管道传输到 S3 上传,但我似乎无法弄清楚...
let fileName = 'qrCode'
let qrCode = Qr.image('The ultimate test', { type: 'svg' });
let output = fs.createWriteStream(fileName)
let qrResult = qrCode.pipe(output)
let s3bucket = new Aws.S3({
accessKeyId: env.AWS_ACCESS_KEY
secretAccessKey: env.AWS_SECRET,
Bucket: env.S3_BUCKET_NAME,
});
let params = {
Bucket: env.S3_BUCKET_NAME,
Key: fileName,
Body: qrResult,
};
s3bucket.upload(params, function (err, qrResult) {
if (err) {
console.log('error in callback');
console.log(err);
}
console.log('success');
console.log(qrResult);
});
您可能需要在参数中添加 ContentType 和 ACL,如下所示:
let params = {
Bucket: env.S3_BUCKET_NAME,
Key: fileName,
Body: qrResult,
ContentType: 'image/svg+xml',
ACL: 'public-read'
};
顺便说一句,我在你的代码中看不到 file
对象。
也使用 putObject
而不是 upload
,例如:
s3bucket.putObject(params...
Key表示二维码的名称,数据是二维码本身。
所以你可以定义一个创建参数的函数,像这样:
aws.config.update({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});
const s3 = new aws.S3({
params: {
Bucket: process.env.S3_BUCKET
}
const data = createParams(name,data);
s3.putObject(data, (err, response) => {....});
createParams(qrName, qrCode) {
let data = {
Key: file.name,
Body: file.data,
ContentType: 'image/svg+xml',
ACL: 'public-read'
}
return data
}
数据是您的写入流或您的 qrCode 的输出