【问题标题】:Bug with downloading files from node.js server on google chrome browser on android device在 Android 设备上的 google chrome 浏览器上从 node.js 服务器下载文件的错误
【发布时间】:2014-05-19 08:11:09
【问题描述】:

我在服务器上使用这样的节点模块:

  • “快递”:“~3.3.5”,
  • “猫鼬”:“~3.6.17”,
  • “mongodb”:“*”,
  • “gridfs-stream”:“*”

服务器在 https 上运行并需要身份验证。

获取文件的代码如下:

var conn = mongoose.createConnection(app.get('mongoUrl'), { db: { safe: true }});

  conn.once('open', function() {

    var gfs = Grid(conn.db, mongoose.mongo);
    var readStream = gfs.createReadStream({_id: fileId});

    readStream.on("open", function() {

    res.header( "Content-Type", "application/octet-stream");
    res.header( "Content-Disposition", "attachment; filename=\"" + fileName + "\"");

    readStream.pipe(response);

  });

});

在桌面 Chrome 浏览器上运行良好。它也适用于移动 Firefox 浏览器。

但在移动版 Chrome 34 上它失败了。

下载开始,几分钟后出现通知下载失败。

问题已在 LG Nexus 4 Android 4.4、Asus Nexus 7 Android 4.2、Samsung Galaxy S3 Android 4.2、Samsung Galaxy i9250 Android 4.3 上进行了测试。

我认为问题可能出在响应标头中,也可能是移动 Chrome 错误。

【问题讨论】:

    标签: android node.js mongodb google-chrome express


    【解决方案1】:

    我想你正在遭受this bug 的痛苦。从它已经快 5 年的历史以及它从开发者那里获得的关注量来看,我不会打赌它会很快得到修复(即使那样,也可能只是在新设备上)。

    简而言之:下载管理器拒绝您的 SSL 证书,因为它不信任它,而且与浏览器不同,它不会费心要求用户确认。

    这些是你的选择(而且它们都很糟糕):

    1.手动将证书导入 Android 信任存储区。 例如,可以在 here 找到它的逐步说明。

    2。使用不同的浏览器和/或下载管理器。我在普通浏览器和 Chrome 上都看到了这个问题,但据报道 Firefox 并没有受到影响。

    3.通过 HTTP 提供您的下载。 当然,这首先违背了建立安全连接的目的,但如果下载的内容不是那么敏感,这可能是最轻松的方式从可用性的角度来看。

    显然,对于您的用户来说,数字一和二是荒谬的,所以除非您可以直接使用 HTTP,否则恐怕您不走运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-09
      • 2016-05-01
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 2011-11-04
      • 2016-11-26
      相关资源
      最近更新 更多