上传图片并使用GraphicsMagick

时间:2018-02-04 04:08:47

标签: node.js angular sails.js

我使用此代码在Node上传图像:

req.file('image[]')
.upload({
  maxBytes: 5000000, // Files limit(in bytes)
  dirname: path.resolve(sails.config.appPath, 'assets/images/user') // Path to copy the files
}, function whenDone(err, uploadedFiles) {
  if (err) {
    // here must delete the created user before the error
    console.log(err);
  }
  var image_real_name = '';
  var json = [];
  for(var i = 0; i < uploadedFiles.length; i++){
    image_real_name = 'images/user/'+path.basename(uploadedFiles[i].fd);
    json.push(image_real_name);
  }
  res(json);
});

但是我需要压缩图像以获得服务器上的空间,所以我使用了gm GraphicsMagick:

`

var receiver = new Writable({objectMode: true});
  receiver._write = function(file, enc, cb) {
    // The output stream to pipe to
    var output = require('fs').createWriteStream('assets/images/user/' + file.fd);
    gm(file).resize('200', '200').stream().pipe(output);
    cb();
  };
  req.file('image[]').upload(receiver, function(err, files){
    if (err) {
      // here must delete the created user before the error
      console.log(err);
    }
    var image_real_name = '';
    var json = [];
    for(var i = 0; i < files.length; i++){
      image_real_name = 'images/user/'+path.basename(files[i].fd);
      json.push(image_real_name);
    }
    res(json);
  });

`

我正在使用角度,当我通过绑定更改图像的方向时,应该显示新图像但是没有加载,第一个代码都完美但是使用gm不再起作用。我必须重新启动页面才能显示图像。

轨道:   显然图像尚未完全处理,如果输入setTime,图像显示正确:

setTimeout((dataService: DataService, image: any) => {
          dataService.getUser().image = image;
        }, 1000, this.data, dataI.json().url);

任何想法?

1 个答案:

答案 0 :(得分:0)

文件完全加载时有一个完成事件,我通过添加以下内容解决了问题:

output.on("finish", function() { return cb(); });