将文件从网站上传到 S3
Uploading a File from a Website to S3
我正在尝试将图像 (PNG) 从我的网站上传到 S3。
我正在向 Lambda 发送 multipart/form-data 请求,然后使用 Busboy 解析它。
它可以很好地上传到 S3 并显示它是一个 image/png 但是如果我下载文件并尝试查看它,文件无效
是什么原因造成的?我看不出哪里错了。
代码:
var AWS = require('aws-sdk');
var BluebirdPromise = require("bluebird");
var Busboy = require('busboy');
var s3 = BluebirdPromise.promisifyAll(new AWS.S3());
var str = require('string-to-stream');
const SavePFP = async((user_id, req) => {
var busboy = new Busboy({headers: req.headers});
let res = await(new Promise((resolve) => {
busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
console.log('File [' + fieldname + ']: filename: ' + filename);
file.on('data', function (data) {
console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
resolve({
filename,
encoding,
mimetype,
data
});
});
file.on('end', function () {
console.log('File [' + fieldname + '] Finished');
});
});
str(req.rawBody).pipe(busboy);
}));
let {data, encoding, mimetype} = res;
var params = {
Bucket: '...',
Key: user_id,
Body: data,
ACL: 'public-read',
ContentEncoding: encoding,
ContentType: mimetype
};
console.log("Uploading to AWS S3...");
let response = await(s3.upload(params).promise());
console.log("[SavePFP]: " + JSON.stringify(response, null, 2));
if (response && response.Location) {
return response.Location;
}
});
module.exports = {
SavePFP
};
提前致谢!
我只是通过将文件转换为 base64 并从那里上传来完全避免解决这个问题。
谢谢
我正在尝试将图像 (PNG) 从我的网站上传到 S3。
我正在向 Lambda 发送 multipart/form-data 请求,然后使用 Busboy 解析它。
它可以很好地上传到 S3 并显示它是一个 image/png 但是如果我下载文件并尝试查看它,文件无效
是什么原因造成的?我看不出哪里错了。
代码:
var AWS = require('aws-sdk');
var BluebirdPromise = require("bluebird");
var Busboy = require('busboy');
var s3 = BluebirdPromise.promisifyAll(new AWS.S3());
var str = require('string-to-stream');
const SavePFP = async((user_id, req) => {
var busboy = new Busboy({headers: req.headers});
let res = await(new Promise((resolve) => {
busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
console.log('File [' + fieldname + ']: filename: ' + filename);
file.on('data', function (data) {
console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
resolve({
filename,
encoding,
mimetype,
data
});
});
file.on('end', function () {
console.log('File [' + fieldname + '] Finished');
});
});
str(req.rawBody).pipe(busboy);
}));
let {data, encoding, mimetype} = res;
var params = {
Bucket: '...',
Key: user_id,
Body: data,
ACL: 'public-read',
ContentEncoding: encoding,
ContentType: mimetype
};
console.log("Uploading to AWS S3...");
let response = await(s3.upload(params).promise());
console.log("[SavePFP]: " + JSON.stringify(response, null, 2));
if (response && response.Location) {
return response.Location;
}
});
module.exports = {
SavePFP
};
提前致谢!
我只是通过将文件转换为 base64 并从那里上传来完全避免解决这个问题。
谢谢