gpt4 book ai didi

node.js - 如何使套接字成为流?在 imagemagick 之后将 https 响应连接到 S3

转载 作者:搜寻专家 更新时间:2023-10-31 23:06:20 25 4
gpt4 key购买 nike

我一般都是 Node 和编程,我一直在努力解决这个问题......

我想要一个 https 响应,使用 graphicsmagick 调整它的大小并将它发送到我的亚马逊 S3 存储桶。

似乎 https res 是一个 IncomingMessage 对象(我找不到任何相关信息),而来自 graphicsmagick 的标准输出是一个套接字。

奇怪的是,我可以使用管道并将它们发送到具有本地路径的 writeStream,并且 res 和 stdout 都会创建一个漂亮的新调整大小的图像。

我什至可以将 res 发送到 S3(使用 knox)并且它可以工作。

但是 stdout 不想去 S3 :-/

如有任何帮助,我们将不胜感激!

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

var headers = {
'Content-Length': res.headers['content-length']
, 'Content-Type': res.headers['content-type']
}

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

req = S3Client.putStream(stdout,'new_resized.jpg', headers, function(err, res){
})
req.end()
})

})

knox - 用于连接到 S3 – https://github.com/LearnBoost/knoxgraphicsmagick - 用于图像处理 – https://github.com/aheckmann/gm

最佳答案

问题在于亚马逊需要事先知道内容长度(感谢 DarkGlass)

但是,由于我的图像相对较小,所以我发现缓冲优先于 MultiPartUpload。

我的解决方案:

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

关于node.js - 如何使套接字成为流?在 imagemagick 之后将 https 响应连接到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14680543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com