相关疑难解决方法(0)

如何将缓冲区包装为stream2可读流?

如何在使用stream2接口后将node.js缓冲区转换为可读流?

我已经找到了这个答案和stream-buffers模块,但是这个模块基于stream1接口.

node.js node.js-stream

60
推荐指数
3
解决办法
4万
查看次数

如何将Buffer作为fs.createReadStream的参数传递

根据文档 https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options

fs.createReadStream()可以接受Buffer作为第一个参数

我的节点代码:

var _ = require('lodash')
var faker = require('faker')
var http = require('http')
var fs = require('fs')
var xlsx = require('node-xlsx')

var gg = _.range(10).map((item) => {
  return _.range(10).map((item) => {
    return faker.name.findName()
  })
})

http.createServer(function(req, res) {
  var buf = xlsx.build([{
    name: 'sheet1',
    data: gg
  }])
  fs.createReadStream(buf, 'binary').pipe(res)

}).listen(9090)
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

events.js:160
  throw er; // Unhandled 'error' event
  ^

Error: Path must be a string without null bytes
at nullCheck (fs.js:135:14)
at Object.fs.open (fs.js:627:8)
at ReadStream.open (fs.js:1951:6) …
Run Code Online (Sandbox Code Playgroud)

node.js

10
推荐指数
2
解决办法
2万
查看次数

将存储在内存中的字符串传递给pdftotext,antiword,catdoc等

是否可以调用pdftotext,antiword,catdoc(文本提取器脚本)等CLI工具传递字符串而不是文件?

目前,我阅读了调用pdftotext的PDF文件child_process.spawn.我生成一个新进程并将结果存储在一个新变量中.一切正常.

我想传递binary一个fs.readFile而不是文件本身:

fs.readFile('./my.pdf', (error, binary) => {
    // Call pdftotext with child_process.spawn passing the binary.
    let event = child_process.spawn('pdftotext', [
        // Args here!
    ]);
});
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

pdf text child-process node.js

6
推荐指数
1
解决办法
474
查看次数

使用缓冲区重现 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(),
})
Run Code Online (Sandbox Code Playgroud)

这个请求会成功,但它需要我用 编写文件fs,我想避免这种情况。我尝试了一些方法,例如使用库node-streamifier来帮助我从缓冲区创建可读流,但是 api 向我发送了一个错误:{ error: 'Invalid parameter \'file\' or \'bucket\': Object expected' }.

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

注意:我尝试像这样实现 此解决方案formData.append('file', createReadStream(myBuffer))并且像这样formData.append('file', createReadStream(myBuffer,{ encoding: 'binary' }))但没有对错误进行任何更改。

解决方案:

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

_streams:
[ '----------------------------622545709057705753853273\r\nContent-
Disposition: …
Run Code Online (Sandbox Code Playgroud)

javascript pdf buffer stream node.js

6
推荐指数
1
解决办法
1657
查看次数

使用 Nestjs 和 Papa Parse 处理 CSV 文件

我正在尝试使用 Multer 和 Papa Parse 在 NestJS 中处理 CSV 文件。我不想将文件存储在本地。我只想解析 CSV 文件以提取一些信息。

但是,我无法处理它,我尝试了两种不同的方法。在第一个中,我将文件缓冲区传递给 Papa.parse 函数。但是,我收到错误: ReferenceError:FileReaderSync 未定义

@Post('1')
@UseInterceptors(
    FileInterceptor('file', {})
)
async uploadFile(@UploadedFile() file: Express.Multer.File ){
    const csvData = papa.parse(file.buffer, {
        header: false,
        worker: true,
        delimiter: ",",
        step: function (row){
            console.log("Row: ", row.data);
        }
      });
}
Run Code Online (Sandbox Code Playgroud)

因此尝试调用 readFileSync() 如下所示,但是这次我收到错误,ERROR [ExceptionsHandler] ENAMETOOLONG: name too long, open

@Post('2')
@UseInterceptors(
    FileInterceptor('file', {})
)
async uploadFile(@UploadedFile() file: Express.Multer.File ){
    const $file =   readFileSync(file.buffer);
    const csvData = papa.parse($file, {
        header: false,
        worker: true, …
Run Code Online (Sandbox Code Playgroud)

csv file-upload file-processing papaparse nestjs

4
推荐指数
1
解决办法
4995
查看次数