用缓冲区重现fs.createReadStream
我需要发送一个pdf到一个formData的api。 我下载的时候logging如下所示的pdf: <Buffer 6d 61 67 65 49 2f ... >
如果我fs.writeFileSync
它是完全可读的。 但我想尝试将它传递给api,而不必用fs
编写它,以便将pdf作为缓冲区来操作。 我的post看起来像这样:
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
来帮助我从缓冲区中创build可读stream的方法,但是api发送给我一个错误: { error: 'Invalid parameter \'file\' or \'bucket\': Object expected' }
。
所以我的问题是,如何重现fs.createReadStream
行为,这似乎是我的用例唯一工作?
注意:我试图像这样实现这个解决scheme : formData.append('file', createReadStream(myBuffer))
并且像这样formData.append('file', createReadStream(myBuffer,{ encoding: 'binary' }))
没有改变任何东西的错误。
解:
FS正在stream式传输数据,并智能地从他正在读取的文件中添加一些信息,从而在数据stream开始处提供了这一行:
_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
,我对此一无所知! 但这个解决scheme完美的工作
- 节点js的Buffer.toString('binary')
- 如何读取Node.js缓冲区上的UInt64 Double?
- 节点js TCP服务器,socket.on('data') – 数据缓冲区包含高负载的垃圾数据
- 将二进制NodeJS缓冲区转换为JavaScript ArrayBuffer
- Node.js,protobuffer,buffer.lentgh ..如何发送结构化的缓冲区/消息槽tcp?
- 缓冲区返回值和32位无符号整数
- 我怎样才能禁用nodejs ChildProcess.spawn标准输出缓冲区?
- Nodejs,将bin文件作为BYTEA存储到pgsql(损坏的文件)
- Node.js将缓冲区转换为Int8Array