gpt4 book ai didi

node.js - 如何在可读的http流上运行Sharp转换并写入文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:06 24 4
gpt4 key购买 nike

这个问题是关于 Node Sharp 库 http://sharp.pixelplumbing.com/en/stable/api-input/

构造函数的文档称,如果将图像数据通过管道传输到锐利对象中,它可以从流中读取图像数据。 “JPEG、PNG、WebP、GIF、SVG、TIFF 或原始像素图像数据在不存在时可以流式传输到对象中。”

我正在尝试将来自 GCS 的 HTTP GET 的可读流传输到转换中,然后使用 toFile 在文件中获取转换后的图像。我收到来自 Sharp 的错误,表明它没有正确输入图像数据。以下代码是执行此工作流程的函数的一部分。

const avatarId = this.Uuid(),
sharp = this.Sharp({failOnError: true}),
instream = this.GoogleCloudStorage.GET(this.GoogleCloudStorage.getName(photo.uri)),
fileLocation = this.getTempFileLocation()

sharp.rotate().extract({left: x, top: y, width: w, height: w})
if (w > 600) {
sharp.resize(600, 600, {fastShrinkOnLoad: false})
w = 600
}

instream.pipe(sharp)
return sharp.jpeg().toFile(fileLocation)
.then( info => {
console.log('editAvatar: sharp done')
return this.GoogleCloudStorage.POST( avatarId, this.Fs.createReadStream( fileLocation ), this.getMIMEType(info) )
} )

GoogleCloudStorage.GET 基本上在云存储 File 对象上返回 File.createReadStream 。我已经在脚本中测试了这个 GET 调用,它有效。 GoogleCloudStorage.POST 使用 File.createWriteStream 并将传递的可读流通过管道传输到其中。因此它需要接收一个可读的流,这就是为什么我试图将锐转换写入文件。

我得到的错误输出:

[02/24/2018 07:41:06.892] Error -- message: Input file is missing or of an unsupported image format -- stack: Error: Input file is missing or of an unsupported image format
events.js:163
throw er; // Unhandled 'error' event
^

Error: Unexpected data on Writable Stream
at Sharp._write (/code/api/node_modules/sharp/lib/input.js:114:14)
at doWrite (_stream_writable.js:329:12)
at writeOrBuffer (_stream_writable.js:315:5)
at Sharp.Writable.write (_stream_writable.js:241:11)
at DestroyableTransform.ondata (/code/api/node_modules/readable-stream/lib/_stream_readable.js:612:20)
at emitOne (events.js:96:13)
at DestroyableTransform.emit (events.js:191:7)
at addChunk (/code/api/node_modules/readable-stream/lib/_stream_readable.js:284:12)
at readableAddChunk (/code/api/node_modules/readable-stream/lib/_stream_readable.js:271:11)
at DestroyableTransform.Readable.push (/code/api/node_modules/readable-stream/lib/_stream_readable.js:238:10)

更新:我尝试使用 File.download 代替,效果很好。因此,要么我错过了将流传输到 Sharp 的某些内容,要么 Sharp 有错误。

最佳答案

您可能会发现来自 Google 的此示例很有用,它使用 Sharp 来缩略图图像并将其放入存储桶中

https://github.com/firebase/functions-samples/blob/69b829af5494e7c8104f7f3d10a1496bb773d3e2/image-sharp/functions/index.js

关于node.js - 如何在可读的http流上运行Sharp转换并写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48960700/

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