Tôi đang sử dụng Express.js
và có lộ trình tải lên hình ảnh mà sau đó tôi cần phải đổi kích thước. Hiện tại tôi chỉ để Express
ghi tệp vào đĩa (mà tôi nghĩ sử dụng node-formidable
dưới bìa) và sau đó thay đổi kích thước bằng cách sử dụng gm
(http://aheckmann.github.com/gm/) viết phiên bản thứ hai vào đĩa.Tệp luồng được tải lên bằng Express.js đến gm để loại bỏ ghi hai lần
gm(path)
.resize(540,404)
.write(dest, function (err) { ... });
Tôi đã đọc mà bạn có thể có được một tổ chức của các dòng node-formidable
tập tin trước khi nó viết nó vào đĩa, và kể từ gm
có thể chấp nhận một dòng thay vì chỉ một con đường, tôi sẽ có thể vượt qua quyền này thông qua loại bỏ ghi đôi vào đĩa.
Tôi nghĩ tôi cần phải ghi đè form.onPart
nhưng tôi không chắc chắn nơi (nó nên được thực hiện như Express
middleware?) Và tôi không chắc chắn làm thế nào để có được một tổ chức của form
hoặc những gì chính xác để làm với part
. Đây là bộ xương mã mà tôi đã thấy ở một vài nơi:
form.onPart = function(part) {
if (!part.filename) { form.handlePart(part); return; }
part.on('data', function(buffer) {
});
part.on('end', function() {
}
}
Ai đó có thể giúp tôi đặt hai phần này lại với nhau? Cảm ơn!
Cảm ơn bạn! Điều này đã cho tôi 95% con đường ở đó. Vấn đề cuối cùng của tôi là 'gm' là không đồng bộ và do đó việc phân tích biểu mẫu trả về trước khi thay đổi kích thước thực sự hoàn thành (có nghĩa là url mà tôi đã quay lại máy khách chưa tốt). Có cách nào để cho 'ghê gớm' biết khi xử lý 'phần' thực sự hoàn thành? – Bill
Thực ra, tôi mới kết thúc việc xử lý điều này trên máy khách - thay vào đó hoạt động tốt hơn theo cách đó. Cảm ơn một lần nữa! – Bill
stdout là một luồng. Đó là lý do tại sao bạn có thể pipe() nó vào một file WriteStream. Và điều đó có nghĩa là nó có một sự kiện "kết thúc" mà bạn có thể nghe. Chỉ cần làm stdout.on ('end', fn) và đó là khi bạn có thể nói cho khách hàng biết công việc đã hoàn thành. – juandopazo