【发布时间】:2017-08-05 17:31:50
【问题描述】:
我正在使用 javascript、node.js 和 aws sdk。有很多关于使用签名 URL 直接将现有文件上传到 S3 的示例,但现在我正在尝试上传字符串并在 S3 中创建文件,而没有任何本地保存的文件。有什么建议吗?
【问题讨论】:
标签: javascript node.js amazon-web-services amazon-s3 aws-sdk
我正在使用 javascript、node.js 和 aws sdk。有很多关于使用签名 URL 直接将现有文件上传到 S3 的示例,但现在我正在尝试上传字符串并在 S3 中创建文件,而没有任何本地保存的文件。有什么建议吗?
【问题讨论】:
标签: javascript node.js amazon-web-services amazon-s3 aws-sdk
请按照这里的例子 http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
将您的字符串转换为缓冲区并传递它。它应该可以工作。
【讨论】:
没有尝试过amazon-web-services、amazon-s3 或aws-sdk,但如果您能够上传File 或FormData 对象,您可以在JavaScript 中创建其中一个或两个并上传该对象。
// create a `File` object
const file = new File(["abc"], "file.txt", {type:"text/plain"});
// create a `Blob` object
// will be converted to a `File` object when passed to `FormData`
const blob = new Blob(["abc"], {type:"text/plain"});
const fd = new FormData();
fd.append("file", blob, "file.txt");
【讨论】:
你可以试试这样的:
var fs = require('fs');
exports.upload = function (req, res) {
var file = req.files.file;
fs.readFile(file.path, function (err, data) {
if (err) throw err; // Something went wrong!
var s3bucket = new AWS.S3({params: {Bucket: 'mybucketname'}});
s3bucket.createBucket(function () {
var params = {
Key: file.originalFilename, //file.name doesn't exist as a property
Body: data
};
s3bucket.upload(params, function (err, data) {
// Whether there is an error or not, delete the temp file
fs.unlink(file.path, function (err) {
if (err) {
console.error(err);
}
console.log('Temp File Delete');
});
console.log("PRINT FILE:", file);
if (err) {
console.log('ERROR MSG: ', err);
res.status(500).send(err);
} else {
console.log('Successfully uploaded data');
res.status(200).end();
}
});
});
});
};
【讨论】: