2013-07-09 89 views
0

我遇到零字節流的問題。我正在調整圖像大小並將其作爲流上傳到S3。如果我輸出管道響應它顯示正確。流和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的流的說明。我正在嘗試緩衝區,但迄今爲止沒有成功。

回答

0

好吧,不要去流 - 我想我可以使用暫停流或多部分技術上實現這一點,但否則我不認爲這是可能的。我結束了使用緩衝區。

... 
// 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) { 
...