Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 使用aws-sdk将gm调整大小的图像上传到s3大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我想做的是从网址流式传输图像,并使用graphicsmagick进行处理,并将其上传到s3.我只是没有得到它的工作. @H_502_7@

@H_502_7@将处理后的图像流式传输到本地磁盘(使用fs.createWriteStream)无问题.

@H_502_7@当我缓冲我的流,s3中的最终图像至少具有预期大小(kb-wisE),但我无法打开该图像.

@H_502_7@这是我目前的进展:

@H_502_7@

var request = require('request');

var gm = require("gm");

var AWS = require('aws-sdk');

var mime = require('mime');

var s3 = new AWs.S3();

gm(request('http://www@L_648_6@me-domain.com/some-image.jpg'),"my-image.jpg")
  .resize("100^","100^")
  .stream(function(err,stdout,stderr) {
    var str = '';
    stdout.on('data',function(data) {
       str += data;
    });
    stdout.on('end',function(data) {
      var data = {
        Bucket: "my-bucket",Key: "my-image.jpg",Body: new Buffer(str,'binary'),// thats where im probably wrong
        ContentType: mime.lookup("my-image.jpg")
      };
      s3.client.putObject(data,function(err,res) {
        console.log("done");
      });
    });
  });
@H_502_7@我尝试了一些东西,如创一个filewritestream和filereadstream,但我认为应该有一些更清洁的更好的解决方案的问题…

@H_502_7@编辑:我尝试的第一件事是将Body设置为stdout(来自@AndyD的建议答案):

@H_502_7@

var data = {
    Bucket: "my-bucket",Body: stdout,ContentType: mime.lookup("my-image.jpg")
  };
@H_502_7@但这会返回以下错误

@H_502_7@

CAnnot determine length of [object Object]'
@H_502_7@EDIT2:

@H_502_7@> nodeversion:0.8.6(我也尝试了0.8.22和0.10.0)
> aws-sdk:0.9.7-pre.8(今天安装)

@H_502_7@完整的错误

@H_502_7@

{ [Error: CAnnot determine length of [object Object]]
  message: 'CAnnot determine length of [object Object]',object:
  { _handle:
   { writeQueueSize: 0,owner: [Circular],onread: [Function: onread] },_pendingWriteReqs: 0,_flags: 0,_connectQueueSize: 0,destroyed: false,errorEmitted: false,bytesRead: 0,_bytesDispatched: 0,allowHalfOpen: undefined,writable: false,readable: true,_paused: false,_events: { close: [Function],error: [Function: handlerr] } },name: 'Error' }

解决方法

您不需要自己读取流(在您的情况下,您似乎正在从二进制转换为字符串,并由于var str =”然后再附加二进制缓冲区等的数据…) @H_502_7@

@H_502_7@尝试让putObject管道流如下:

@H_502_7@

gm(request('http://www@L_648_6@me-domain.com/some-image.jpg'),stderr) {
      var data = {
        Bucket: "my-bucket",Body: stdout
        ContentType: mime.lookup("my-image.jpg")
      };
      s3.client.putObject(data,res) {
        console.log("done");
      });
    });
  });
@H_502_7@有关更多信息,请参阅这些release notes.

@H_502_7@如果流/管道不起作用,那么这样的东西可能会将所有内容加载到内存中,然后上传.在这种情况下,我觉得这个限制在4Mb.

@H_502_7@

var buf = new Buffer('');
    stdout.on('data',function(data) {
       buf = Buffer.concat([buf,data]);
    });
    stdout.on('end',Body: buf,ContentType: mime.lookup("my-image.jpg")
      };
      s3.client.putObject(data,res) {
        console.log("done");
      });
    });

大佬总结

以上是大佬教程为你收集整理的node.js – 使用aws-sdk将gm调整大小的图像上传到s3全部内容,希望文章能够帮你解决node.js – 使用aws-sdk将gm调整大小的图像上传到s3所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。