Tag: 亚马逊 s3

使用ExpressJS限制文件大小时将streamfile upload到S3

我想将用户的file upload到S3。 我有一个Web客户端/ NodeJS Express解决scheme。 到目前为止,在我的研究中,我发现使用分段上传,我可以做任何一个这样的: 1.)如果直接使用pipe道启用stream,那么我无法控制文件的大小 。 2.)如果需要控制大小,必须禁用pipe道/stream,并且必须将文件写入磁盘或内存缓冲区才能检查文件大小,然后将其传送到S3。 有什么办法可以让这两个? 我正在看以下中间件: 打杂 多党 multer 强大

Heroku dynos不共享文件系统

我的herokunetworking应用程序有一个function,从S3下载图像。 它是这样工作的: 有一个端点(A)请求下载一个图像数组,返回一个任务ID。 这些图像由A下载到我的应用程序的tmp Heroku文件夹中。 当所有的图像下载时,一个zip文件被创build。 当图像仍然可以下载时,networking客户端从点1调用具有任务ID的另一端点(B)。该第二端点检查已经下载了多less图像以返回进度百分比。 当压缩文件已经被创build时,它将“返回”压缩文件并下载图像。 这个方法在Heroku中用1个dyno运行良好。 不幸的是,在扩展到2个dynos后,我们意识到它不再工作。 原因是Heroku中的dynos不共享相同的文件系统,端点A和B由不同的dynospipe理。 因此,端点B中的测功机没有find任何文件。 有没有一种简单的方法使我的方法与多个dynos一起工作? 如果不是,我应该如何实现所描述的function? (从S3下载一个zip文件中的多个图像)

AWS s3 listobjects与分页

我想用aws s3来实现分页。 在对象ms.files中有500个文件,但是我想一次只检索20个文件,而下一个则只检索20个文件等等。 var params = { Bucket: 'mystore.in', Delimiter: '/', Prefix: '/s/ms.files/', Marker:'images', }; s3.listObjects(params, function(err, data) { if (err) console.log(err, err.stack); else console.log(data); });

nodejs在本地文件系统和Amazon S3文件系统之间切换的最佳方法是什么?

我正在寻找使用本地文件系统和Amazon S3文件系统进行切换的最佳方式。 我想理想情况下,我想要一个封装到我可以编码的两个文件系统。 configuration更改会告诉包装器使用哪个文件系统。 这对我来说很有用,因为开发人员可以使用本地文件系统,但是我们的托pipe环境只需更改configuration选项即可使用Amazon S3。 有没有现有的包装这样做? 我应该写我自己的包装? 有没有另一种方法我不知道会更好?

从AWS显示用户的个人资料图片

我完全不熟悉AWS,我想了解一些关键概念在开始构build之前是如何工作的。 我发现本教程直接将图像上传到节点JS中的AWS: https://devcenter.heroku.com/articles/s3-upload-node#uploading-directly-to-s3 在我的webapp中,我使用的是MongoDB,每个用户(用户模式)都能够更改他们的个人资料图片。 在高层次上,我一直在想用户select一个新的图片并点击保存,我会按照上面的步骤直接上传新的图像到AWS的“桶”。 那么我将如何将其呈现在用户的个人资料页面上? 我是否需要在AWS端使用数据库(并跳过我的应用程序的mongodb部分),将每个用户与个人资料图片相关联? 我理解“保存到AWS”部分,但是不清楚如何以与用户关联的方式来检索/呈现映像(保存到AWS后)。 这是我的mongoose用户架构: 'use strict'; var crypto = require('crypto'); var bcrypt = require('bcryptjs'); var mongoose = require('mongoose'); var recipeSchema = require('./recipe.js').schema; //need the objectID, see: https://gist.github.com/fwielstra/1025038 var Schema = mongoose.Schema; var ObjectId = Schema.ObjectId; var userSchema = new Schema({ email: { type: String }, password: String, resetPasswordToken: String, resetPasswordExpires: […]

将模型导入为对象,而不是在使用Express的Node.js项目中运行

我有一个使用快递的node.js项目。 在这个项目中,我有一个models文件夹,其中包含项目中使用的不同模型。 在我的MosaicParTileStreamerS3Only模型中,我有以下几点: 'use strict'; var GlobalMercator = require('./GlobalMercator.js'); var S3 = require('./S3.js'); var binary = require('binary'); var bufferpack = require('bufferpack'); function MosaicParTileStreamerS3Only() { }; 进一步进入这个模型,我使用S3没有任何问题: MosaicParTileStreamerS3Only.prototype.Init = function(filepath, index, s3config){ var retval = false; this.s3 = new S3(s3config.access_key, s3config.secret_key, s3config.host); var host = s3config.host; var bucket = s3config.bucket; filepath = s3config.tile_directory + filepath; var […]

aws-sdk上传到S3在KOA中工作,但在通过Mocha调用时停止工作

我需要从koa上传一个文件到s3,我对koa来说很新,可能丢失了一些明显的东西。 它实际上完成了200,但文件从来没有出现在S3上。 这里是我的app.js的一个片段: 'use strict'; var jwt = require('koa-jwt'); var bodyParser = require('koa-bodyparser'); var koaBody = require('koa-body'); const app = module.exports = require('koa')() .use(koaBody({multipart:true})) // this is to pase only multipart forms .use(require('./routes/common')) .use(require('./routes/auth')) .use(require('./routes/users_public')) .use(jwt({ secret: SECRET })) //protected routes below this line .use(require('./routes/subcontractors_private')) .listen(process.env.PORT || 3000); subcontractors_private.js看起来像这样: 'use strict'; var AWS = require('aws-sdk'); […]

无法用s3 getSignedUrl('getObject ..)下载图像并返回Signature不匹配

我对AWS比较陌生。 所有我试图做的是从我的应用程序上传图像到aws S3,并下载它在应用程序的另一个页面查看图像。 上传成功,并能够在S3中看到上传的图像。 但无法下载,因为它会引发以下错误。 FileTransferError {body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKXXXXXXXXXXXXXXXXXX</AWSAccessKeyId> <StringToSign>GET\n\n\n1469897687\n/huntuploads/uploads/%25222a85a6675d15eeeca5c8b da6eed4c52e%2522</StringToSign> <SignatureProvided>cUBhtiA5AGJbj8vl%2FX6xi%2B9BBRY%3D</SignatureProvided> <StringToSignBytes>47 45 54 0a 0a 0a 31 34 36 39 38 39 37 36 38 37 0a 2f 68 75 6e 74 66 6f […]

使用AWS Lambda和API网关来提供静态JavaScript?

我正在写一个第三方小部件,执行JavaScript客户端端添加一个button到用户的网站。 从本质上讲,用户将在他们的网站上包含一个标签,其中包含我的小部件的path。 该path的URL将包含调用该窗口小部件的特定用户的app_id。 例如 <script src="www.widget.com/widget/{USER_ID}"> 我希望能够使用AWS Lambda和API Gateway进行一些快速authentication,允许用户下载该小部件并提供javascript内容。 这在Express.js中很像res.sendFile,但API Gateway似乎不支持发送文件。 有没有什么方法可以使用API​​网关快速提供JavaScript,而不必将整个文件串联起来?

使用node.js中的Promise从s3桶下载图像

我想使用node.js中的Promises从本地系统的s3存储桶下载一些图像文件。 var params = { Bucket: bucket_name', Key: 'key' }; var fileStream = fs.createWriteStream('path/to/file.jpg'); 我试过这是工作 s3.getObject(params).createReadStream.pipe(fileStream); 但是我希望我的代码看起来像这样 return s3.getObject(params).promise() .then(function(data) { //console.log(data.Body); // No idea about this section }) .catch(function(err) { throw err; }); 我必须使用Promise来确保应该下载所有的图片。