Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript节点缓冲区_Javascript_Node.js_Buffer - Fatal编程技术网

JavaScript节点缓冲区

JavaScript节点缓冲区,javascript,node.js,buffer,Javascript,Node.js,Buffer,我正在尝试创建一个客户机-服务器应用程序,其中客户机向服务器发送一个数组中的文件名列表,例如let files=[“Cat.jpeg”,“Moon.gif”],我正在尝试使用缓冲区,以便服务器可以将响应发送回客户机并打开这些文件。但我不知道如何处理这个问题 我试过了 let imageNames = Buffer.from(files) 但我不知道如何提取这些数据并读取这些值。一种方法是将一组BLOB对象(或从服务器读取的文件缓冲区)返回到前端,并让JS将BLOB/buffers转换为原始文件

我正在尝试创建一个客户机-服务器应用程序,其中客户机向服务器发送一个数组中的文件名列表,例如let files=[“Cat.jpeg”,“Moon.gif”],我正在尝试使用缓冲区,以便服务器可以将响应发送回客户机并打开这些文件。但我不知道如何处理这个问题

我试过了

let imageNames = Buffer.from(files)

但我不知道如何提取这些数据并读取这些值。

一种方法是将一组BLOB对象(或从服务器读取的文件缓冲区)返回到前端,并让JS将BLOB/buffers转换为原始文件类型以供下载

下面是一个可以轻松调整的PDF示例:

节点:

前端(React和Axios):

注意
Blob API是文件API的一部分,它位于
工作草案中,可以在浏览器和版本之间更改。因此,请确保进行广泛的浏览器测试。

一种方法是将BLOB对象数组(或从服务器读取的文件缓冲区)返回到前端,并让JS将BLOB/buffers转换为原始文件类型以供下载

下面是一个可以轻松调整的PDF示例:

节点:

前端(React和Axios):

注意
Blob API是文件API的一部分,它位于
工作草案中,可以在浏览器和版本之间更改。因此,请确保进行广泛的浏览器测试。

我特别建议不要使用缓冲区,而是使用流以单独的方式在res中对文件进行管道传输

创建一个接收文件名的路由,然后在响应中向下流传输该文件

在前端可以对每个文件进行单独的请求


因为与单个请求相比,它不会使服务器过载,并且会增加处理大量请求的限制,从而使所有这些文件的CPU利用率都很高,并返回响应,对于哪个Node.JS是非常糟糕的。

我特别建议不要使用缓冲区,而是使用流分别以res管道传输文件

创建一个接收文件名的路由,然后在响应中向下流传输该文件

在前端可以对每个文件进行单独的请求


因为与单个请求相比,它不会使服务器过载,并且会增加处理大量请求的限制,从而使所有这些文件的CPU利用率都很高,并返回响应,对于哪个Node.JS是非常糟糕的。

只需从客户端单独请求每个文件,然后您就可以使用所有正常的http请求/响应逻辑来非常有效地为这些静态文件提供服务。发明您自己的多文件请求/响应系统是一件麻烦事,实际收益微乎其微。客户端仍然可以并行发出多个请求,并让服务器在给定连接带宽的情况下尽可能快地将它们发回。只需从客户端单独请求每个文件,然后您就可以使用所有正常的http请求/响应逻辑来非常有效地为这些静态文件提供服务。发明您自己的多文件请求/响应系统是一件麻烦事,实际收益微乎其微。客户机仍然可以并行发出多个请求,并允许服务器在给定连接带宽的情况下尽可能快地将它们发回。
// Express route
let fileBuffer = fs.fileReadSync('path/to/file.pdf')

return res.status(200).send(fileBuffer)
axios.get('api/endpoint')
  .then(response => {
    const pdfBlob = new Blob(
      [Response.data], 
      {type:'application/pdf;charset=utf8'}
    )

    // Save file here
  })
  .catch(error => {
    // do something with error
  })