Chrome 在发送 8 个字节之前不会显示文件正在下载(Firefox 会显示)

2024-04-01

我想要一个将文件发送给用户的http方法,但它需要一些时间(例如4秒)来生成文件内容。

我想要的是浏览器立即显示正在下载的文件。但 Chrome 仅在发送 8 个字节后才显示文件正在下载。我预先不知道文件的前 8 个字节。然而,Firefox 会立即显示下载情况。

这是示例(在 Express 中,但后端技术并不重要,我在 ASP.Net 中有相同的示例):

const express = require('express');

const app = express();
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

app.get('/:type?', async (req, res) =>  {
  res.set("Content-type", "application/octet-stream");
  res.set("Content-Disposition", "attachment;filename=\"Report.txt\"");

  res.write('1234567'); 
  if (req.params.type == "instant")
    res.write('8'); //if I send 8 bytes before sleep, file downloading appears instantly
  await sleep(4*1000);

  res.write('9');
  res.end();
});

app.listen(3000, () => {
  console.log('server started');
});

https://repl.it/@ArturDrobinskiy/AllJumboSpellchecker?language=nodejs https://repl.it/@ArturDrobinskiy/AllJumboSpellchecker?language=nodejs

有办法解决这个问题吗?

包含上述代码的示例 URL:

  • 发送了 7 个字节,下载不是即时的 https://alljumbospellchecker--arturdrobinskiy.repl.co/
  • 发送8个字节,立即开始下载 https://alljumbospellchecker--arturdrobinskiy.repl.co/instant

您可以尝试在文件前面添加 0 宽度的空格字符。

const express = require('express');

const app = express();
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

app.get('/:type?', async (req, res) =>  {
  res.set("Content-type", "application/octet-stream");
  res.set("Content-Disposition", "attachment; filename=\"Report.txt\"");
  res.write('\u200B\u200B\u200B\u200B\u200B\u200B\u200B\u200B'); 
  //res.write('1234567'); 
  if (req.params.type == "instant")
    res.write('8'); //if I send 8 bytes before sleep, file downloading appears instantly
  await sleep(4*1000);

  res.write('9');
  res.end();
});

app.listen(3000, () => {
  console.log('server started');
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chrome 在发送 8 个字节之前不会显示文件正在下载(Firefox 会显示) 的相关文章

随机推荐

  • 使用 PDO 准备好的语句插入多行

    我想知道是否可以使用一个准备好的语句插入多行 下面是我通常如何将一行插入数据库的示例 params array params val1 val1 params val2 val2 params val3 val3 sql INSERT IN
  • 在 RDS 上,我可以在只读副本中创建主服务器上不存在的表吗?

    我们有一个单独的 RDS 实例来处理会话状态表 但是发现会话数据库负载非常低 如果我们可以将实例处理会话转换为主数据库的只读副本 那么我们就可以将其用于只读任务 即使副本存在较大滞后 这些任务也是安全的 有没有人在 RDS 上做过类似的事情
  • 在 angular.js 中以实际大小显示图像

    我需要以实际大小显示图像 即使它比其容器大 我尝试了使用 Image 变量的技巧和捕获负载大小 https stackoverflow com a 7686392 196451像这样的东西 HTML div div
  • iPad、iOS8 和 Objective-C 中的 UIAlertController 不显示“取消”按钮

    我正在尝试使用 UIAlertController 我需要一个带有两个按钮的弹出窗口 取消 和 删除并注销 但我只能看到 删除并退出 按钮 看不到取消按钮 这是代码 NSString confirmText Hi UIAlertContro
  • 使用相机拍照并保存到图库

    我已经浏览了几个文档和堆栈 但是我不太确定如何实现这个 帮助或示例代码确实可以帮助我了解更多 这是运行相机的代码集 它工作得很好 我的下一个问题是 如何让它自动保存到手机图库中 Override protected void onCreat
  • CodeIgniter Active Record 从一个表插入到另一个表

    使用 codeigniter 活动记录语法将数据从一个表插入到另一个表的语法是什么 我尝试了通常的 mysqli 查询并且它有效 但我想使用 CodeIgniter Active Record 语法来保持一致性 我尝试使用这些 CodeIg
  • python 二维数组到字典

    我想从表示为二维数组的对称矩阵的下三角创建一个字典 例如 如果 numpy 数组是 array 0 2 3 2 0 4 3 4 0 然后我希望字典看起来像 1 0 2 2 0 3 2 1 4 矢量也有类似的帖子 将 Numpy 数组转换为稀
  • 在javascript中检测字符串的unicode语言

    我有一个包含几个单词的字符串 我想找出所有只包含泰米尔语 Unicode 字符的单词 我是 JavaScript 新手 使用 Go 我做同样的事情 tokens strings Fields stringContent delim spli
  • 是否可以从 Stripe API 获取某个计划的订阅者数量?

    我正在使用 Stripe net 库来调用 Stripe API 我想获得各种计划的订户总数 但我不确定当前的 API 和 或 Stripe NET 库是否可以实现这一点 任何人都可以提供任何关于这是否可能的见解吗 我发现这有效 抱歉 这是
  • 正则表达式 - 格式化块中的文本 - IM

    您好 我正在尝试找出一个正则表达式来替换innerHTML块中的文本 以便为类似于Google IM的操作的文本提供本地格式 Where Italics Inderline Bold Strike 部分条件是文本必须由符号包裹 但如果紧随其
  • 从另一个 android 项目导入的自定义属性

    从我读到的别处 http code google com p android issues detail id 9656 当您将包含的项目的命名空间更改为 xmlns si http schemas android com apk 时 自定
  • 如何通过在python中匹配某些字符来删除字符串中的某些字符

    如果在字符串中找到匹配项 我正在尝试删除字符串的某些部分 如下所示 string Newyork NY 我想从字符串中删除逗号后面的所有字符 包括comma 如果字符串中存在逗号 谁能告诉我现在该怎么做 Use split http doc
  • 匹配分隔符分隔的值并省略带有标题的第一行

    我不太熟悉正则表达式 我从 dsv 文件中匹配由半列分隔的所有值 如下所示 d 但是 我想跳过包含标题名称的第一行 我想出了与第一行相匹配的类似内容 或者我相信它确实如此 A z 我想以某种方式组合这两个正则表达式 并确保分隔符分隔值匹配不
  • 为什么 JavaScript 压缩器用双引号替换单引号?

    制作一些 Bookmarklet 我尝试使用 JavaScript minifier 例如谷歌闭包编译器 http closure compiler appspot com home or YUI压缩器 http www refresh s
  • 使用 dropboxjs 通过 oauth 对客户端进行身份验证 2. 服务器端呢?

    我对 Oauth 和服务器端的东西还很陌生 所以请耐心等待 我有一个网络应用程序可以通过以下方式对用户进行身份验证dropbox js https github com dropbox dropbox js 一切都非常简单 该应用程序使用
  • Gitpython 初始化并推送新的存储库

    所以我尝试使用 gitpython https gitpython readthedocs io en stable intro html https gitpython readthedocs io en stable intro htm
  • 如何让html忽略文本中的代码?

    我需要在我的 html 文档中包含一些代码 我试过了 pre 标签 但这没有帮助 如何将此代码放入文本文档中 Thanks 简短的回答 使用在线编码您的代码HTML编码器 http www opinionatedgeek com dotne
  • 从 Pandas Timedelta 获取总小时数?

    如何获取 Pandas timedelta 中的总小时数 例如 gt gt gt td pd Timedelta 1 days 2 hours gt gt gt td get total hours 26 注意 根据文档 hours属性将返
  • 使用 Spring Batch 的 Json 数组读取器文件

    我有一个文件作为输入 其中包含 json 数组 我想在不破坏 Spring Batch 原则的情况下阅读它 与 FlatFileReader 或 XmlReader 相同的方式 我没有找到任何方法来做到这一点 读者已经在 spring ba
  • Chrome 在发送 8 个字节之前不会显示文件正在下载(Firefox 会显示)

    我想要一个将文件发送给用户的http方法 但它需要一些时间 例如4秒 来生成文件内容 我想要的是浏览器立即显示正在下载的文件 但 Chrome 仅在发送 8 个字节后才显示文件正在下载 我预先不知道文件的前 8 个字节 然而 Firefox