首页 > 解决方案 > 使用 Koa 将远程图像流式传输到缓冲区

问题描述

第一次玩nodejs流。我觉得我在这里错过了一些关于流如何工作的基本知识。当我向 URL 发出请求时,它会注销 404。如果我尝试写入缓冲区,则会引发错误。 TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be one of type string, Buffer, or URL. Received type object

  1 const Koa = require('koa')
  2 const app = new Koa()
  3 const fs = require('fs')
  4 
  5 const url = 'http://4.bp.blogspot.com/-cDeYCsNL-ZQ/UozsUJ7EqfI/AAAAAAAAGSk/EtuzOVpHoS0/s400/andy.png'
  6 app.use(ctx => {
  7   const buffer = new Buffer.alloc(1000)
  8   ctx.request.get(url).pipe(fs.createWriteStream(buffer))
  9   console.log(ctx.request)
 10   console.log(ctx.response)
 11 })
 12 
 13 app.listen(1337)

标签: node.jsimagestreambufferkoa

解决方案


错误是由这部分引起的:fs.createWriteStream(buffer). 该方法需要一个包含文件系统路径的字符串,例如fs.createWriteStream("image.png").

一般来说,您的用例不需要显式创建任何缓冲区。甚至 Koa 也是多余的。如果您想在后台使用缓冲区将 URL 的内容流式传输到硬盘。你可以写:

const request = require("request")
const fs = require("fs")

const url = 'http://4.bp.blogspot.com/-cDeYCsNL-ZQ/UozsUJ7EqfI/AAAAAAAAGSk/EtuzOVpHoS0/s400/andy.png'

request(url).pipe(fs.createWriteStream('image.png'))

推荐阅读