最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

使用缓冲区再现fs.createReadStream

IT培训 admin 1浏览 0评论

使用缓冲区再现fs.createReadStream

我需要使用formData将pdf发送到api。我下载了pdf文件,登录后如下所示:<Buffer 6d 61 67 65 49 2f ... >如果我fs.writeFileSync,则可读性很强。但我想尝试将其传递给api,而不必用fs编写,以将pdf作为缓冲区进行操作。我的帖子看起来像这样:

const formData = new FormData();
formData.append('access_key', this.config.redacted);
formData.append('redacted','redacted');
formData.append('file', fs.createReadStream('./filename.pdf'));
return post('urlRedacted', formData, {
    headers: formData.getHeaders(),
})

此请求将成功,但是它要求我使用fs写入文件,但要避免这样做。我尝试了一些类似的操作,例如使用库node-streamifier帮助我从缓冲区创建可读流,但是api向我发送了一个错误:{ error: 'Invalid parameter \'file\' or \'bucket\': Object expected' }

所以我的问题是,如何重现fs.createReadStream行为,这似乎是唯一适用于我的用例的行为?

注意:我尝试像这样实现this solution:formData.append('file', createReadStream(myBuffer))和这样的formData.append('file', createReadStream(myBuffer,{ encoding: 'binary' })),但未对错误进行任何更改。

解决方案:

fs正在流传输数据,并从正在读取的文件中智能地添加了一些信息,因此在数据流的开头提供了这一行:

_streams:
[ '----------------------------622545709057705753853273\r\nContent-
Disposition: form-data; name="file"; filename="tickets.pdf"\r\nContent-Type: application/pdf\r\n\r\n',

此数据必须是有效上传,因此我将它们添加到我的formData中,如下所示:formData.append("file", buffer, {contentType: "application/pdf", filename: "tickets.pdf"})

似乎与Blob有关,我对此一无所知!但是此解决方案效果很好!

回答如下:

我将FormData对象重新创建为JSON,并最终使用了以下内容。

const formData = {
  file: {
    value: (my-file.pdf as a Buffer),
    options: {
      contentType: 'application/pdf',
      filename: 'my-file.pdf'
    }
  }

使用缓冲区再现fs.createReadStream

我需要使用formData将pdf发送到api。我下载了pdf文件,登录后如下所示:<Buffer 6d 61 67 65 49 2f ... >如果我fs.writeFileSync,则可读性很强。但我想尝试将其传递给api,而不必用fs编写,以将pdf作为缓冲区进行操作。我的帖子看起来像这样:

const formData = new FormData();
formData.append('access_key', this.config.redacted);
formData.append('redacted','redacted');
formData.append('file', fs.createReadStream('./filename.pdf'));
return post('urlRedacted', formData, {
    headers: formData.getHeaders(),
})

此请求将成功,但是它要求我使用fs写入文件,但要避免这样做。我尝试了一些类似的操作,例如使用库node-streamifier帮助我从缓冲区创建可读流,但是api向我发送了一个错误:{ error: 'Invalid parameter \'file\' or \'bucket\': Object expected' }

所以我的问题是,如何重现fs.createReadStream行为,这似乎是唯一适用于我的用例的行为?

注意:我尝试像这样实现this solution:formData.append('file', createReadStream(myBuffer))和这样的formData.append('file', createReadStream(myBuffer,{ encoding: 'binary' })),但未对错误进行任何更改。

解决方案:

fs正在流传输数据,并从正在读取的文件中智能地添加了一些信息,因此在数据流的开头提供了这一行:

_streams:
[ '----------------------------622545709057705753853273\r\nContent-
Disposition: form-data; name="file"; filename="tickets.pdf"\r\nContent-Type: application/pdf\r\n\r\n',

此数据必须是有效上传,因此我将它们添加到我的formData中,如下所示:formData.append("file", buffer, {contentType: "application/pdf", filename: "tickets.pdf"})

似乎与Blob有关,我对此一无所知!但是此解决方案效果很好!

回答如下:

我将FormData对象重新创建为JSON,并最终使用了以下内容。

const formData = {
  file: {
    value: (my-file.pdf as a Buffer),
    options: {
      contentType: 'application/pdf',
      filename: 'my-file.pdf'
    }
  }

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论