Tag: amazon s3

在node.js中创buildS3签名的URL

我正在使用knox模块https://github.com/LearnBoost/knox为S3上的文件创build签名的URL,这是我之前使用PHP SDK完成的。 我可以从我的存储桶中删除文件,但是当我尝试为具有私有ACL的文件生成的URL时,出现SignatureDoesNotMatch错误。 代码看起来像这样 var knox = require('knox'); var s3Client = knox.createClient({ key: '*****', secret: '*****', bucket: '*****' }); function getS3Url(filename) { var expires = new Date(); expires.setMinutes(expires.getMinutes() + 30); return s3Client.signedUrl(filename, expires); } console.log(getS3Url('file.txt')); 我究竟做错了什么?

aws lambda中的简单node.js示例

我正在尝试用aws lambda发送一个简单的请求。 我的模块结构如下: mylambda |– index.js |– node_modules | |– request 我压缩文件,并将其上传到lambda。 然后我调用它,并返回以下错误。 "errorMessage": "Cannot find module 'index'" 这里是index.js文件的内容 var request = require('request'); exports.handler = function(event, context) { var headers = { 'User-Agent': 'Super Agent/0.0.1', 'Content-Type': 'application/x-www-form-urlencoded' } // Configure the request var options = { url: 'https://myendpoint', method: 'POST', headers: headers, form: {'payload': {"text":""} […]

在Mongo GridFS或Amazon S3中存储图像的速度更快?

我正在开发一个项目,每个用户都可以发布多个图像。 我们使用Node.js和Express和MongoDB作为数据库。 我想知道哪种方法在速度和可伸缩性方面会更好: 在Mongo GridFS中存储图像 要么 在Amazon S3上存储图像,在MongoDB上存储图像path。 然后使用path检索图像。 任何想法感激! 谢谢,

如何纯粹使用Cognito来authentication用户使用S3

我已经阅读了这篇文章和AWS回复如何在API中使用Cognito标记? 这一个如何使用AWSauthentication与自定义身份validation创build临时S3上传安全令牌 我还不清楚是否有一个简单的解决scheme来保护S3访问。 我有一个移动客户端和一个node.js后端。 客户端使用后端进行身份validation,并接收一个jwt accesstoken,以便进一步调用我的后端。 除了与我自己的后端进行通信之外,用户还应该能够从S3上传和下载文件。 我正在寻找最简单的解决scheme,以确保只有具有有效accesstoken我的后端用户可以上传到S3。 我可以做以下(这是基于这个博客文章http://blog.backspace.academy/2015/03/using-cognito-with-nodejs-part-2.html ): 客户端使用我的自定义node.js后端进行身份validation,并从后端接收自定义accesstoken 我的node.js后端获取CognitoID AWS临时用户凭证。 然而,AWS的文档说,我们还需要一个会话令牌(大概是通过调用CognitoSync),所以我假设我的退缩需要获得会话令牌。 我的node.js后端将这些临时凭证和会话令牌传递给客户端 客户端使用它们通过AWS SDK传递凭证+会话令牌来调用S3。 我错过了什么吗? 有一个更简单的方法来做到这一点? 我假设没有办法简单地让客户机将自己的自定义node.js用户accesstoken传递给AWS / S3 / Cognito,并让S3 / Cognito通过调用我自己的可以validation此令牌的node.js API来validation该令牌。

上传时错误的图像方向 – Amazon S3

我让用户使用Multer-S3将多个图像直接上传到Amazon-S3,然后通过循环在前端显示这些图像。 所有的作品完美。 但是,当通过手机上传图片(在iPhone或Android上拍摄的图片)时,手机的方向是正确的,但在桌面上没有正确的方向。 主要问题。 这是由于我相信图像的EXIF数据。 看起来像ImageMagick或Kraken JS https://kraken.io/docs/storage-s3可能是一种解决方法,但对于我的生活,我无法弄清楚如何以我上传和显示图像的方式来实现如下所示。 如何更改我的代码以自动定位图像? 注意:它必须适用于多个图像 。 谢谢你的帮助! 下面是我让用户直接向Amazon-S3上传多个图片的方式: aws.config.update({ secretAccessKey: 'AccessKey', accessKeyId: 'KeyID', region: 'us-east-2' }); var s3 = new aws.S3(); var storage = multerS3({ limits : { files: 25 }, s3: s3, bucket: 'files', key: function (req, file, cb) { var fileExtension = file.originalname.split(".")[1]; var path = "uploads/" + […]

从node.js报告上传进度

我正在编写一个小型的node.js应用程序,它从HTML表单接收多部分POST,并将传入的数据pipe理到Amazon S3。 强大的模块提供了多部分parsing ,将每个部分暴露为一个节点Stream 。 Knox模块将PUT处理为s3。 var form = new formidable.IncomingForm() , s3 = knox.createClient(conf); form.onPart = function(part) { var put = s3.putStream(part, filename, headers, handleResponse); put.on('progress', handleProgress); }; form.parse(req); 我正在通过socket.io向浏览器客户端报告上传进度,但是难以获取这些数字来反映节点向s3上传的真实进度。 当浏览器到节点上传几乎立即发生时,就像节点进程在本地networking上运行一样,进度指示器立即达到100%。 如果文件很大,例如300MB,进度指示器缓慢上升,但仍然比我们的上游带宽更快。 打到100%的进度后,客户端挂起,大概等待s3上传完成。 我知道putStream内部使用Node的stream.pipe方法,但我不明白这是如何真正的工作的细节。 我的假设是,节点尽可能快地吞噬传入的数据,并把它扔到内存中。 如果写入stream可以足够快地获取数据,那么很less的数据会一次存储在内存中,因为它可以被写入和丢弃。 如果写入stream很慢,那么我们可能必须将所有传入的数据保存在内存中,直到它可以被写入。 由于我们正在侦听读取stream上的data事件以便发送进度,因此我们最终报告上传速度比实际速度快。 我对这个问题的理解是否接近标准? 我该如何去解决它? 我是否需要记下来, write下来, drain和pause ?

你如何使用Node.jsstream式传输MP4文件与ffmpeg?

我一直在努力解决这个问题好几天了,真的很感谢这个话题。 我能够使用fluent-ffmpeg成功传输存储在Node.js服务器上的mp4audio文件,方法是将文件的位置作为string传递,并将其转码为mp3。 如果我从同一个文件创build一个文件stream,并将其传递给fluent-ffmpeg,它可以用于mp3input文件,而不是mp4文件。 在mp4文件的情况下,没有错误抛出,并声称stream成功完成,但没有什么在浏览器中播放。 我猜这是与存储在mp4文件末尾的元数据有关,但我不知道如何编码。 这是完全相同的文件,当它的位置被传递给ffmpeg,而不是stream。 当我尝试传递一个stream到S3上的mp4文件时,再次没有错误,但没有stream到浏览器。 这并不奇怪,因为ffmpeg不能在本地作为stream来处理文件,所以期待它从s3处理stream是一厢情愿的想法。 我怎样才能streams3 mp4文件,而不是作为一个文件本地存储在本地? 如何获得ffmpeg来做到这一点,而不是转码文件呢? 以下是我目前无法使用的代码。 请注意,它试图将s3文件作为stream传递给ffmpeg,并将其转码为一个mp3,我不想这样做。 .get(function(req,res) { aws.s3(s3Bucket).getFile(s3Path, function (err, result) { if (err) { return next(err); } var proc = new ffmpeg(result) .withAudioCodec('libmp3lame') .format('mp3') .on('error', function (err, stdout, stderr) { console.log('an error happened: ' + err.message); console.log('ffmpeg stdout: ' + stdout); console.log('ffmpeg stderr: ' + stderr); […]

如何确定S3.getObject()中的数据types

S3的node.js API给出了getObjectcallback中返回的数据的描述。 从http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property : 正文 – (缓冲区,types化数组,Blob,string,ReadableStream)对象数据。 这是真的吗? 有没有办法控制这是什么东西?

使用强大的和(knox或aws-sdk)在Node.js上传文件到S3

我正尝试使用aws-sdk或knox将通过表单提交的文件直接上传到Amazon S3存储桶。 表格处理是强大的 。 我的问题是:如何正确使用aws-sdk(或knox)强大的处理stream使用这些库的最新function? 我知道这个话题已经在这里以不同的口味被提出来了, 如何使用node.js强大的库来接收上传的文件并使用knox将其保存到Amazon S3? 节点应用程序stream文件直接上传到亚马逊S3 从一个节点强大的file upload (以及它在overiding form.onPart()上非常有用的接受的答案) 访问原始文件stream 不过,我相信答案有点过时和/或偏离主题(即CORS的支持,目前我不想使用它,因为各种原因)和/或最重要的是,没有提到最新的function或者aws-sdk(参见: https : //github.com/aws/aws-sdk-js/issues/13#issuecomment-16085442 )或者knox(特别是putStream()或者其可读的stream标记(req)变体) 在文档中 )。 经过几个小时的挣扎之后,我得出结论,我需要一些帮助(免责声明:我是一个相当新鲜的stream)。 HTML表单: <form action="/uploadPicture" method="post" enctype="multipart/form-data"> <input name="picture" type="file" accept="image/*"> <input type="submit"> </form> Express bodyParser中间件是这样configuration的: app.use(express.bodyParser({defer: true})) POST请求处理程序: uploadPicture = (req, res, next) -> form = new formidable.IncomingForm() form.parse(req) form.onPart = (part) -> if […]

AWS Lambda – 下载文件,并将其用于相同的function – nodejs

我有一些证书文件s3(公共),我要下载并在我的代码中使用这些文件,如果我在我的本地写nodejs的等效代码,它只是运行良好,但在AWS lambda它只是崩溃。 var apn = require('apn'); var https = require('https'); var fs = require('fs'); exports.handler = function(event, context) { console.log("Running aws apn push message function"); console.log("=================================="); console.log("event", event); var certPath = event.certPath; var keyPath = event.keyPath; var certFileName = event.certFileName; var keyFileName = event.keyFileName; var passphrase = event.passphrase; var apnId = event.apnId; var content = […]