相关疑难解决方法(0)

通过HTTP将数据从浏览器流式传输到服务器的方法

是否有类似XHR的浏览器API可用于通过HTTP将二进制文件流式传输到服务器?

我希望随着时间的推移制作HTTP PUT请求并以编程方式创建数据.我不想一次创建所有这些数据,因为它可能会在内存中出现.一些psueudo代码来说明我所得到的:

var dataGenerator = new DataGenerator(); // Generates 8KB UInt8Array every second
var streamToWriteTo;
http.put('/example', function (requestStream) {
  streamToWriteTo = requestStream;
});

dataGenerator.on('data', function (chunk) {
  if (!streamToWriteTo) {
    return;
  }
  streamToWriteTo.write(chunk);
});
Run Code Online (Sandbox Code Playgroud)

我现在有一个Web套接字解决方案,但更喜欢常规HTTP,以便更好地与一些现有的服务器端代码互操作.

编辑:我可以使用最前沿的浏览器API.我正在查看Fetch API,因为它支持请求体的ArrayBuffers,DataViews,Files等.如果我能以某种方式伪造其中一个对象,以便我可以使用动态数据的Fetch API,这对我有用.我尝试创建一个Proxy对象,看看是否有任何方法被调用,我可以修补.不幸的是,似乎浏览器(至少在Chrome中)正在使用本机代码而不是JS版本进行读取.但是,如果我错了,请纠正我.

javascript browser http xmlhttprequest

11
推荐指数
3
解决办法
5794
查看次数

11
推荐指数
1
解决办法
1万
查看次数

Blob二进制数据存储在哪里?

特定

var data = new Array(1000000);
for (var i = 0; i < data.length; i++) {
  data[i] = 1;
}
var blob = new Blob([data]);
Run Code Online (Sandbox Code Playgroud)

哪个是存储的数组的二进制数据表示?

javascript blob

6
推荐指数
4
解决办法
3880
查看次数

从完整形成的响应触发大文件下载

问题

我有一个 Node.js 端点,当使用以下命令访问时,它会正确触发任意大的文件下载:

response.setHeader('Content-disposition', 'attachment; filename=' + fileName);
response.set('Content-Type', 'text/csv');
response.status(200);
result.pipe(response);
Run Code Online (Sandbox Code Playgroud)

其中result变换流responseExpress 对象

当直接访问 Chrome、Firefox、Internet Explorer 等中的端点时,此方法工作正常。问题是在启用基于令牌的身份验证时尝试访问端点而产生的。

从用户的角度来看,当他们单击按钮时,就会下载文件。

如何使按钮使用请求标头中的正确身份验证令牌命中此端点并导致下载文件?

集思广益一些可能的方法

  1. 当用户单击该按钮时,它会触发由 redux-api-middleware 处理的操作,该操作GET向端点发出请求(身份验证令牌自动包含在请求中)。该中间件将响应保存在一个变量中,该变量由 React 组件获取。在此 React 组件中,如果正在使用的浏览器(即 Chrome 和 Opera)支持流,response.body则会存在,因此您可以执行如下操作。

    if (response.body) {
        const csvReader = response.body.getReader();
        const textDecoder = new TextDecoder();
        const processCsvRow = (csvRow) => {
            if (csvRow.done) {
                console.log('Finished downloading file.');
                return Promise.resolve();
            }
    
            // Write to new file for user to download …
    Run Code Online (Sandbox Code Playgroud)

node.js express jwt http-token-authentication react-redux

5
推荐指数
1
解决办法
2701
查看次数