2014-06-05 18 views
8

SailsJS (beta) kullanıyorum. Skipper-işlevi req.file('inputName').upload()'u aramadan önce görüntüyü yeniden boyutlandırmak için SailsJS-beta'da Skipper tarafından ayrıştırılan akışı almak için graphicsmagick'i kullanmanın bir yolunu bulmaya çalışıyorum.SailsJS (beta) resimdeki Skipper, yüklemeden önce yeniden boyutlandırabilir

Amacım, büyük, orijinal resmimi çekip yüklemeden önce yeniden boyutlandırmak. Sails beta, zayıf bir şekilde belgelenen Skipper-dosya-çözümleyicisini tanıttı (en azından anlamıyorum). Lütfen yüklemeden önce resmin nasıl yeniden boyutlandırılacağını anlamama yardımcı olun.

// Read the file stream into a file upload 
var stream = req.file('fileName'); 

gm(stream).resize(200, 200).write('storedImage.png', function(err){ 
    // File is now resized to 200x200 px and uploaded to storedImage.png 
}); 

Benim sorun olduğunu: Ben düzgün göndermek için req.file('fileName') gelen akışı getirme nasıl

Bu (benim denetleyicisi eylem kodu) çalışır:

req.file('fileName').upload('storedImage.png', function(err, files){ 
    // File is now uploaded to storedImage.png 
}); 

İstediğim gibi bir şey gm'ye mi?

cevap

12

Bu sizin için çalışması gerekir:

var Writable = require('stream').Writable; 
var resize = require('image-resize-stream')(100); // Or any other resizer 

// The output stream to pipe to 
var output = require('fs').createWriteStream('storedImage.png'); 

// Let's create a custom receiver 
var receiver = new Writable({objectMode: true}); 
receiver._write = function(file, enc, cb) { 
    file.pipe(resize).pipe(output); 

    cb(); 
}; 

Şimdi eylem Eğer sadece alıcıyı kullanmak zorunda: Ben Skipper'ın API değişecek bir his var

req.file('fileName').upload(receiver, function(err, files){ 
    // File is now resized to 100px width and uploaded to ./storedImage.png 
}); 

, çok Ancak, bu şimdi çalışacaktır (v0.1.x ile).

Özellikle

GÜNCELLEME, yeniden boyutlandırma için gm kullanarak, eğer böyle bir şey olacak: Ben @bredikhin çözümü ile sorunlar bu yüzden bu ineceğinize vardı

var gm = require('gm'); 
var Writable = require('stream').Writable; 

// The output stream to pipe to 
var output = require('fs').createWriteStream('storedImage.png'); 

// Let's create a custom receiver 
var receiver = new Writable({objectMode: true}); 
receiver._write = function(file, enc, cb) { 
    gm(file).resize('200', '200').stream().pipe(output); 

    cb(); 
}; 
+0

Gm'yi (graphicsmagick) resizer olarak nasıl uygularsınız? – hansmei

+0

@hansmei Güncellendi. – bredikhin

+0

Çok teşekkür ederim! – hansmei

1

ve bunu buldum çok yararlı iplik: Ben sadece onun Uploader bir satır değişti Uploading files using Skipper with Sails.js v0.10 - how to retrieve new file name

:

[...]  

file.pipe(outputs); 

[...] 
içine

:

gm(file).resize(200, 200).stream().pipe(outputs); 

ve bu hile yok.

Bu yanıtı yazdım, çünkü birisi için yararlı olabilir.

+1

'a döndürmeye çalışıyorum. Güncellenmiş yazılarında @bredikhin'nin söylediği tam olarak değil mi? – hansmei

İlgili konular