【问题标题】:Issues with streams and S3 upload流和 S3 上传问题
【发布时间】:2013-07-06 13:14:30
【问题描述】:

我遇到了零字节流的问题。我正在调整图像大小并将其作为流上传到 S3。如果我通过管道输出响应,它会正确显示。

// Fetch remote file
var request = http.get('mybigfile.jpg', function(response) {

  // Setup IM convert
  var convert = spawn('convert', ['-', '-strip', '-thumbnail', 600, '-']);

  // Pipe file stream to it
  response.pipe(convert.stdin);

  // Pipe result to browser - works fine
  //convert.stdout.pipe(res);


  // S3 requires headers
  var headers = {
    'content-type': response.headers['content-type'],
    'x-amz-acl': 'public-read'
   };

  // Upload to S3
  var aws = aws2js.load('s3', aws.key, aws.secret);
  aws.setBucket(aws.bucket);
  aws.putStream('thumb.jpg', convert.stdout, false, headers, function(err) {
    if (err) {
      return console.error('Error storing:', err.toString());
    } else {
      // No errors - this shows - but file is 0kb
      console.log(path + ' uploaded to S3');
    }
  }

我看到有关由于内容长度而无法使用 S3 的流的注释。我正在尝试缓冲区,但到目前为止没有成功。

【问题讨论】:

    标签: javascript node.js amazon-s3 stream


    【解决方案1】:

    好吧,不要继续流 - 我想我可以使用 pause-stream 或 multipart 从技术上实现这一点,但否则我认为这是不可能的。我最终使用了缓冲区。

    ...
    // Pipe file stream to it
    response.pipe(convert.stdin);
    
    // Save to buffer
    var bufs = [] ;
    convert.stdout.on('data', function(chunk) {
      bufs.push(chunk);
    });
    convert.stdout.on('end', function() {
      var buffer = Buffer.concat(bufs);
    
    // S3 requires headers
    ...
    
    aws.putBuffer(path, buffer, false, headers, function(err) {
    ...
    

    【讨论】:

      猜你喜欢
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 2018-07-10
      相关资源
      最近更新 更多