Tag: amazon s3

如何使用node.js将pass-thru上传到Heroku上的s3?

这是我目前的代码。 我使用快速和knox,我不认为我做任何exception,但s3.putFile响应400状态代码,但空错误,并不上传文件。 var express = require('express'); var knox = require('knox'); var app = express(); app.use(express.bodyParser()); var s3 = knox.createClient({ key: process.env.AWS_ACCESS_KEY_ID, secret: process.env.AWS_SECRET_ACCESS_KEY, bucket: process.env.S3_BUCKET_NAME }); app.post('/upload', function(req, res, next) { var photo = req.files.photo; var s3Headers = { 'Content-Type': photo.type, 'x-amz-acl': 'public-read' }; s3.putFile(photo.path, photo.name, s3Headers, function(err, s3response){ //handle, respond }); }); 即使从cloud9在线编辑器/debugging器,这个相同的代码工作正常,而不是从Heroku。 我猜这跟“ […]

使用aws-sdk使用nodejs将图像上传到s3

我想上传图片到amazon web services器,为此,我正在使用aws-sdk和nodejs。 我能够上传图片到S3桶,但是当我点击URL来访问他们,我得到了访问被拒绝的错误。 这是我的configuration var AWS = require('aws-sdk'); //aws credentials AWS.config = new AWS.Config(); AWS.config.accessKeyId = "<access_key>"; AWS.config.secretAccessKey = "<secret_key>"; AWS.config.region = "ap-southeast-1"; AWS.config.apiVersions = { "s3": "2006-03-01" } var s3 = new AWS.S3(); var bodystream = fs.createReadStream(req.files.pic.path); var params = { 'Bucket': '<bucket_name>', 'Key': 'uploads/images/' + req.files.pic.name, 'Body': bodystream, 'ContentEncoding': 'base64', 'ContentType ': […]

Node.js knox s3图像检索

我试图从节点s3中检索一个图像使用以下内容: app.get('/photos', function(req, res, next) { var data = ''; s3.get('/tmp/DSC_0904.jpg').on('response', function(s3res){ console.log(s3res.statusCode); console.log(s3res.headers); s3res.setEncoding('binary'); s3res.on('data', function(chunk){ data += chunk; }); s3res.on('end', function() { res.contentType('image/jpeg'); res.send(data); }); }).end(); }); 我接受build议,为什么这是行不通的。

nodejs knox放到s3结果是403

我试图在nodejs项目中使用knox上传到Amazon S3存储桶,但无法通过403错误。 我已经确定了关键,秘密和桶是正确设置的。 我真的可以从那些有更多经验的人那里得到一些帮助。 我的节点代码如下: var upload_test = function(){ var client = knox.createClient( { key: config.aws.key , secret: config.aws.secret , bucket: config.aws.bucket } ); fs.readFile('test.pdf', function(err,buf){ var req = client.put('6530/test.pdf', { 'Content-length': buf.length, 'Content-Type': 'application/pdf' }); req.on('response',function(res){ if(res.statusCode === 200){ console.log('Success!'); req.on('data',function(chunk) { console.log(chunk); }); } else { console.log("Error statusCode: " + res.statusCode); console.log("URL: " […]

使用lambda函数在S3中解压缩文件真的很慢

我的公司正在上传大档案文件到S3,现在想要他们在S3上解压缩。 我写了一个基于unzip的lambda函数,由文件到达xxx-zip存储区触发,它从S3stream解压缩文件,解压缩stream,然后将单个文件stream式传输到xxx数据存储区。 它可以工作,但是我发现它比我预期的要慢得多 – 即使在一个testing文件中,zip大小约为500k,并且保存了大约500个文件,但是超时设置为60秒。 这看起来正确吗? 在我的本地系统运行节点比这更快。 在我看来,由于文件被转移到亚马逊的云延迟应该是短暂的,并且由于文件正在stream,实际所花费的时间应该是解压缩stream的时间。 有没有一个固有的原因,为什么这将无法正常工作,或者有我的代码中的东西造成它如此之慢? 这是我第一次使用node.js,所以我可能会做一些不好的事情。 或者有没有更好的方法来做到这一点,我无法find谷歌? 下面是代码的概要( BufferStream是我写的一个类, s3.getObject()由s3.getObject()返回的Buffer包装到readStream ) var aws = require('aws-sdk'); var s3 = new aws.S3({apiVersion: '2006-03-01'}); var unzip = require('unzip'); var stream = require('stream'); var util = require( "util" ); var fs = require('fs'); exports.handler = function(event, context) { var zipfile = event.Records[0].s3.object.key; s3.getObject({Bucket:SOURCE_BUCKET, Key:zipfile}, function(err, […]

aws-sdk node.js s3 putObject从请求体

我正在尝试使用AWS-SDK将PDF保存到S3中。 我通过POST(应用程序/ PDF)的正文获取PDF。 使用fs.writeFile将文件保存到本地HD时,文件看起来OK。 但是当上传到s3文件已损坏(单个白页pdf) 任何帮助或暗示将不胜感激! var data = body // body from a POST request. var fileName = "test.pdf"; fs.writeFile(fileName, data, {encoding : "binary"}, function(err, data) { console.log('saved'); // File is OK! }); s3.putObject({ Bucket: "bucketName", Key: fileName, Body: data }, function(err, data) { console.log('uploaded') // File uploads incorrectly. }); 编辑: 它可以工作,如果我写,然后读取文件,然后上传。 fs.writeFile(fileName, data, […]

AWS S3 JavaScript SDK getSignedUrl仅返回基本path

我有一些非常简单的代码来生成一个S3的URL。 我从SDK获取的URL只有S3的基本path。 它不包含任何其他内容。 为什么发生这种情况? var AWS = require('aws-sdk'); var s3 = new AWS.S3(); console.log(s3.getSignedUrl('getObject', { Bucket: 'test', Key: 'test' })); // Returns "https://s3.amazonaws.com/" Node.js v0.12.0,AWS SDK 2.1.15或2.1.17,Windows 7 64位,

使用JavaScript API设置S3对象到期(用于删除)

我正在使用适用于Amazon AWS S3的Node.js JavaScript API,并且希望将对象设置为在创build对象后指定的天数过期。 也就是说,如果我创build并上传了一个新对象,我希望它从现在起100天左右自动删除它自己。 是否可以设置每个对象的删除到期? 文件表明这可能是可能的: Amazon S3提供了一个到期操作,您可以在生命周期configuration中指定过期操作以使对象过期。 … 当一个对象到达其生命周期结束时,Amazon S3会将其排队并将其移除,并将其asynchronous移除。 到期date与Amazon S3删除对象的date之间可能存在延迟。 与过期的对象相关联的存储时间不收取费用。 但是,似乎我必须在桶configuration中设置此过期,而不是在上传/创build它们时按对象。 JavaScript SDK文档指出,我可以在创build对象时设置Expires参数,但是当S3为后续GET请求返回对象时,这似乎是针对Expires HTTP标头的。 有没有办法在创build对象时设置对象的到期date? s3.putObject({ Bucket: config.s3.bucketName, Key: s3Key, Body: objBuffer, ACL: 'public-read', ContentType: 'image/jpeg', StorageClass: 'REDUCED_REDUNDANCY', // Some option here for setting expiration/deletion date? }, function () { console.log(arguments); });

AWS Lambda copyObject“在完成请求之前退出进程”

我试图复制上传到S3存储桶的文件来创build时间戳备份。 (“活”文件将被定期覆盖以保持永久链接) AWScopyObject,但是,似乎并没有执行。 我收到以下错误 { "errorMessage": "Process exited before completing request" } 导致此错误的代码如下所示; console.log('Loading function'); var AWS = require('aws-sdk'); var s3 = new AWS.S3(); exports.handler = function(event, context) { var srcBucket = event.Records[0].s3.bucket.name; var srcKey = event.Records[0].s3.object.key; var dstKey = srcBucket+'/backup/'+ Date.now() + '-' +srcKey; console.log(srcKey); console.log(dstKey); var copyParams = { Bucket: srcBucket, CopySource : […]

无法使用aws-sdk在nodejs中上传图像

我试过使用aws-sdk和knox,我得到状态代码301试图上传图像。 我得到了状态码301和消息 – “你试图访问的桶必须使用指定的端点来寻址。 请将所有未来请求发送到此端点。 这在PHP中工作。 AWS.config.loadFromPath(__dirname + '/config/config.json'); fs.readFile(source, function (err, data) { var s3 = new AWS.S3(); s3.client.createBucket({Bucket: 'mystuff'}, function() { var d = { Bucket: 'mystuff', Key: 'img/test.jpg', Body: data, ACL: 'public-read' }; s3.client.putObject(d, function(err, res) { if (err) { console.log("Error uploading data: ", err); callback(err); } else { console.log("Successfully uploaded data […]