Tag: 亚马逊 s3

使用node.js保存存储在s3上的图像?

我正在尝试编写一个使用node.js在s3上存储图像的图像服务器。 上传图片效果很好,我可以使用s3浏览器客户端(我使用的是dragondisk,但是我也成功下载了它)也可以正确下载和查看它,但是当我用节点下载并尝试将其写入磁盘,我无法打开该文件(它表示可能已损坏或使用预览无法识别的文件格式)。 我正在使用amazon sdk节点和fs写入文件。 我知道你可以通过一个可选的编码fs.writeFile,但我已经尝试了所有,它不起作用。 我也尝试在getObject上设置putObject和ResponseContentType上的ContentType,以及ContentEncoding和ResponseContentEncoding(以及各种组合中的所有这些东西)。 同样的结果。 这是一些代码: var AWS = require('aws-sdk') , gm = require('../lib/gm') , uuid = require('node-uui') , fs = require('fs'); AWS.config.loadFromPath('./amazonConfig.json'); var s3 = new AWS.S3(); var bucket = 'myBucketName'; // There's other logic here to set the bucket name. exports.upload = function(req, res) { var id = uuid.v4(); gm.format("/path/to/some/image.jpg", function(format){ […]

amazon s3 deleteObjects nodejs – 无法让它工作

我正在使用nodejs并试图一次删除多个对象。 但由于某种原因,尽pipe没有返回任何错误,操作不能按预期工作(文件不被删除)。 这里是代码: s3.deleteObjects({ Bucket: 'myprivatebucket/some/subfolders', Delete: { Objects: [ { Key: 'nameofthefile1.extension' }, { Key: 'nameofthefile2.extension' }, { Key: 'nameofthefile3.extension' } ] } }, function(err, data) { if (err) return console.log(err); console.log('success'); }); 如果我尝试遍历这些文件,并使用s3.deleteObject方法,那么它工作得很好。 我也试图指定没有其子文件夹(如“myprivatebucket”),但我没有得到任何结果。 任何想法如何使这个事情工作? 我使用节点版本:0.10.32和aws应该是2.0.17。

使用ec2创build存储在s3上的图像的缩略图,并在完成时与导轨进行通信的优雅方法?

好吧,快速总结一下我的设置和我想完成的事情: 我有一个轨道2.3.5服务器运行我的网站。 我在我的网站上有一个Flash应用程序,用户可以直接将图像上传到s3。 上传完成后,会通知Rails。 在图像完成上传到S3和轨道被通知的地步,我想轨道发送一些post到位于EC2的东西创build两个缩略图(110×110和600×600)。 当缩略图创build并传输到S3,我想要任何进程的EC2发回一个职位的轨道,以通知缩略图创build完成,并在S3上。 什么是完成这个最好的方法? 我非常简短地看过刀等工具,但对于使用ec2或类似的服务,我并不熟悉。 谢谢

AWS Cors问题 – Node.js

使用CORS标头请求存储在AWS S3(简单存储)上的图像时,我目前遇到问题。 我已经在AWS控制台上设置了CORSconfiguration – 设置如下: <?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <AllowedHeader>Authorization</AllowedHeader> </CORSRule> </CORSConfiguration> 然而,当我请求这些存储的图像的时候,我得到的回应是一点点的,而且是相当间歇的。 有时图像是返回与头requred有时不是。 我真的不知道为什么会发生这种情况。 当我尝试使用一个页面上的Access-Control-Allow-Origin头部设置为*的方式尝试创build一个以上的图像请求时,效果会恶化(例如,如果我需要10个图像来检索所有带有交叉原始头文件)。 这些是我需要的标题: Access-Control-Allow-Methods:GET Access-Control-Allow-Origin:* Access-Control-Max-Age:3000 我真的不确定我做错了什么。 我已经确保每个图片标签都添加了crossOrigin =“anonymous”属性,但同样没有运气。 我需要这些图像交叉原点的原因是因为我已经安装了一个angular度插件,允许用户裁剪图像,并将裁剪版本的图像存储为base64string。 不过,在尝试检索它们时,出现以下错误。 这些是正确返回的图像的标题: Request URL:https://trajansmarket.s3.amazonaws.com/be5bbda0-b04a-11e5-81d3-dd7ff3efeebc.jpg Request Method:GET Status Code:304 Not Modified Remote Address:54.231.252.131:443 Response Headers view source Access-Control-Allow-Methods:GET Access-Control-Allow-Origin:* Access-Control-Max-Age:3000 Cache-Control:public, max-age=31536000 Date:Tue, 12 Jan 2016 21:13:03 […]

S3file uploadstream使用节点js

我试图find一些解决scheme,使用节点js服务器与要求在亚马逊S3上stream文件: 不要将临时文件存储在服务器或内存中。 但是最新的一些限制不完整的文件,缓冲可以用于上传。 上传的文件大小没有限制。 不要冻结服务器,直到完成file upload,因为在繁重的file upload的情况下,其他请求的等待时间会意外增加。 我不想使用从浏览器直接上传文件,因为在这种情况下需要共享S3证书。 从js服务器上传文件的另外一个原因是在上传文件之前可能还需要申请一些authentication。 我试图用节点多方来实现这一点。 但这并不像预期的那样工作。 你可以在https://github.com/andrewrk/node-multiparty/issues/49看到我的解决scheme和问题。 它适用于小文件,但大小为15MB的文件失败。 任何解决scheme或替代?

使用Node.js将二进制数据推送到Amazon S3

我正在尝试使用Node.js将图像上传到Amazon S3存储桶。 最后,我希望能够将图像上传到S3,然后能够访问该S3 URL并在浏览器中查看图像。 我正在使用一个Curl查询来执行一个HTTP POST请求与图像作为正文。 curl -kvX POST –data-binary "@test.jpg" 'http://localhost:3031/upload/image' 然后在Node.js端,我这样做: exports.pushImage = function(req, res) { var image = new Buffer(req.body); var s3bucket = new AWS.S3(); s3bucket.createBucket(function() { var params = {Bucket: 'My/bucket', Key: 'test.jpg', Body: image}; // Put the object into the bucket. s3bucket.putObject(params, function(err) { if (err) { res.writeHead(403, {'Content-Type':'text/plain'}); res.write("Error […]

亚马逊S3服务器上的Concat MP3 /媒体audio文件

我想连接在Amazon S3服务器上上传的文件。 我怎样才能做到这一点。 本地机器上的串联我可以使用以下代码。 var fs = require('fs'), files = fs.readdirSync('./files'), clips = [], stream, currentfile, dhh = fs.createWriteStream('./concatfile.mp3'); files.forEach(function (file) { clips.push(file.substring(0, 6)); }); function main() { if (!clips.length) { dhh.end("Done"); return; } currentfile = './files/' + clips.shift() + '.mp3'; stream = fs.createReadStream(currentfile); stream.pipe(dhh, {end: false}); stream.on("end", function() { main(); }); } main();

我如何把对象的amazon s3使用presigned url?

我正在尝试使用签名的url将图片上传到s3存储桶。 以下是我的桶政策: { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::12345678:user/myuser", "arn:aws:iam::12345678:root" ] }, "Action": [ "s3:List*", "s3:Put*", "s3:Get*" ], "Resource": [ "arn:aws:s3:::myBucket", "arn:aws:s3:::myBucket/*" ] } ] } 我正在从服务器生成签名的url,如下所示: var aws = require('aws-sdk'); aws.config = { accessKeyId: myAccessKeyId, secretAccessKey: mySecretAccessKey }; var s3 = new aws.s3(); s3.getSignedUrl('putObject', { Bucket: […]

获取stream的内容长度

在我的node.js应用程序中,我使用gm(graphicsmagick包装器)和aws2js(亚马逊cli包装器) 。 问题是,亚马逊需要知道内容的长度,以便我可以把stream在S3上。 我正在将图像上传到我的应用程序,通过创build一个stream来读取该文件: var fileStream=fs.createReadStream(file.path) 我把这个文件传给gm,调整它的大小,然后告诉它来传输这个文件。 然后我想把这个stream到aws: gm( fileStream, "some.png" ). identify({bufferStream: true}, function(err, info) { this.stream("png", function (err, stdout, stderr) { if (err){console.log(err);cb(err);return;} aws.S3.putStream(path, stdout, 'public-read', {'content-length': ?????, 'content-type': 'image/png'}, function (err, result) { ….. } }); }); }); 问题是,亚马逊需要知道内容长度(它不是库)来放置stream。 AWS不支持分块stream。 有谁知道我怎么能确定一个stream的内容长度? 或者唯一的解决办法是将tmp写入磁盘,以stream的forms读取文件,然后将其与temp文件的内容长度一起放到amazon中?

从url下载文件并将其上传到AWS S3而不保存 – node.js

我正在编写一个应用程序,它从url下载图像,然后使用aws-sdk将其上传到S3存储桶。 很明显,我只是下载图像,并像这样保存到磁盘。 request.head(url, function(err, res, body){ request(url).pipe(fs.createWriteStream(image_path)); }); 然后像这样将图像上传到AWS S3 fs.readFile(image_path, function(err, data){ s3.client.putObject({ Bucket: 'myBucket', Key: image_path, Body: data ACL:'public-read' }, function(err, resp) { if(err){ console.log("error in s3 put object cb"); } else { console.log(resp); console.log("successfully added image to s3"); } }); }); 但我想跳过保存图像到磁盘的部分。 有什么办法可以将request(url)的响应传递给一个variables,然后上传?