奇怪的流行为node.js / knox

时间:2013-03-31 22:17:58

标签: node.js amazon-web-services amazon-s3 imagemagick knox-amazon-s3-client

我一直在研究How to make a socket a stream? To connect https response to S3 after imagemagick这个问题的答案。根据loganfsmyth的推荐,我评论了req.end(image)行但是当我尝试上传文件时,服务器只是超时了。当我取消注释req.end(图像)行时,我会遇到类似的行为,但图像成功上传到S3。有人可以向我说明哪种方式是正确的,如果取消注释req.end(image)行是正确的,那么向浏览器发送响应以防止它超时的最佳方法是什么?

https.get(JSON.parse(queryResponse).data.url,function(res){

  graphicsmagick(res)
    .resize('50','50')
    .stream(function (err, stdout, stderr) {

      ws. = fs.createWriteStream(output)

      i = []

      stdout.on('data',function(data){
        i.push(data)
      })

      stdout.on('close',function(){
        var image = Buffer.concat(i)

        var req = S3Client.put("new-file-name",{
           'Content-Length' : image.length
          ,'Content-Type' : res.headers['content-type']
        })

        req.on('response',function(res){  //prepare 'response' callback from S3
          if (200 == res.statusCode)
            console.log('it worked')
        })
        //req.end(image)  //send the content of the file and an end
      })
  })
})

2 个答案:

答案 0 :(得分:0)

基本上,页面被请求两次,导致图像因为图标而被覆盖。 node.js page refresh calling resources twice?

答案 1 :(得分:0)

在您链接的问题中,该用户使用putStream,因此调用req.end()不正确,但是在您的情况下,您直接使用put,因此您需要致电{ {1}}。否则,如果注释掉了,除了长度之外,你永远不会实际使用req.end()值,所以你永远不会发送图像数据。

很难说没有看到实际运行此代码的服务器处理程序,但您需要(可选)返回一些响应,然后image实际连接到浏览器,或者它将在那里设置等待。

所以如果你有这样的东西

.end()