2014-06-05 3 views
8

SailsJS (베타)를 사용하고 있습니다. 스키머 - 함수 req.file('inputName').upload()을 호출하기 전에 이미지 크기를 조정하기 위해 SailsJS-beta의 Skipper가 파싱 한 스트림을 가져 오는 그래픽 마 닉을 사용하는 방법을 찾으려고합니다.SailsJS (베타)의 스키퍼가 업로드 전에 크기 조정

제 목표는 크고 원본 이미지를 업로드하고 업로드하기 전에 크기를 조정하는 것입니다. Sails 베타는 Skipper-file-parser를 소개합니다. 적어도 필자는 그것을 이해하지 못합니다. 업로드하기 전에 이미지의 크기를 조정하는 방법을 알려주십시오.

// 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 
}); 

내 문제입니다 : 내가 제대로 보낼 req.file('fileName')에서 스트림을 가져 어떻게

이것은 (내 컨트롤러 액션 코드) 작동 :

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

내가 원하는 뭔가가있다 그것 GM에?

답변

12

이 당신을 위해 작동합니다 :

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(); 
}; 

지금 당신의 행동에 당신이 당신의 수신기를 사용할 필요가 : 나는 선장의 API를 바꿀 것입니다 느낌이

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

을 많이 ,하지만 지금은 (v0.1.x와 함께) 작동합니다.

특히

UPDATE는 크기 조정에 대한 gm를 사용하는 경우,이 같은 수 있습니다 : 나는 @bredikhin 솔루션에 문제가 그래서 난이 더 깊이 파고했다

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 (graphicsmagick)을 resizer로 구현하는 방법은 무엇입니까? – hansmei

+0

@hansmei 업데이트 됨. – bredikhin

+0

정말 고마워요! – hansmei

1

이 발견 스레드 매우 도움이 됨 : Uploading files using Skipper with Sails.js v0.10 - how to retrieve new file name

그의 한 줄을 변경했습니다. Uploader :

[...]  

file.pipe(outputs); 

[...] 

:

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

이 트릭을 수행합니다.

누군가에게 도움이 될 수 있기 때문에이 답변을 작성했습니다.

+1

업데이트 된 게시물에서 @bredikhin이 말한 것이 정확히 아닌가요? – hansmei