4

我将图像存储在 Grid/FS 上,为了改进 UI,我想调整所有图像的大小以适应特定尺寸(拉伸和挤压效果超出范围)。目前,图像使用以下方式返回...

FileProvider.prototype.streamFile = function(res, _id, contenttype){
  var properId = this.db.bson_serializer.ObjectID.createFromHexString(_id)
  res.contentType(contenttype)
  var readstream = gfs.createReadStream(properId, {
    "content_type": contenttype,
    "id":true,
    "metadata":{
      "author": "Jackie"
    },
    "chunk_size": 1024*4 })
  readstream.pipe(res)
}

这很好用,但现在我想截取图像并调整它的大小,所以我的想法是在内存中流式传输它而不是使用imagemagik进行调整大小(如果有更好的方法,请随时告诉我)。

但是,以下代码无法加载图像...

FileProvider.prototype.streamFile = function(res, _id, contenttype){
  var properId = this.db.bson_serializer.ObjectID.createFromHexString(_id)
  res.contentType(contenttype);
  var readstream = gfs.createReadStream(properId, {
      "content_type": contenttype,
      "id":true,
      "metadata":{
        "author": "Jackie"
      },
      "chunk_size": 1024*4 });
  var writestream = new stream.Stream()
  writestream.writeable = true
  writestream.write = function(data){
    console.log("Streaming.."+data)
  }
  writestream.pipe = function(src){
    console.log("Piping:"+src)
  }
  writestream.end = function (data){
    console.log(JSON.stringify(data))
    console.log("Completed")
  }
  readstream.pipe(writestream)
}

这会将以下内容输出到控制台...

不明确的

完全的

换句话说,没有数据被写入 writeStream。谁能看到我做错了什么?

4

0 回答 0