【问题标题】:Writing chunks to writable steam produces incorrect file - currupt and in larger size than original file将块写入可写流会产生不正确的文件 - 损坏且比原始文件大
【发布时间】:2019-12-07 00:41:15
【问题描述】:

我想从服务器下载一个文件,我们有一个 C# 服务,它根据输入中的请求返回文件的数据块(HTTP 状态 - 206)。在客户端,在 Node.js 应用程序中,我想合并所有块并保存文件。

我可以成功下载一个文本文件,它与服务器上的文件匹配。但是,当我尝试下载 PDF 文件时。生成的文件几乎是原始文件大小的两倍,并且已损坏 - 我下载单个块 - 使用可写流将它们组合起来。

我尝试创建可写流,将编码指定为 utf8(导致文件更大)、二进制和 ASCII(导致文件更小)。

我无法创建可读流并将其通过管道传输到可写流,因为源数据(块)已经以 API 响应的形式存在,并且可读流只接受文件路径作为输入。对吗?

下面的post我都经历过,但是用处不大。

private async WriteToStreamAsyc(wStream: Writable, chunk: any) {
    !await wStream.write(chunk);
}

我知道这是一个非常微不足道的案例,人们可能正在广泛地执行此任务,但是,我没有运气和选择,任何建议都可能非常有帮助。

【问题讨论】:

    标签: node.js typescript stream


    【解决方案1】:

    我正在使用节点请求库。请求库的默认编码为 utf8,因此它将响应缓冲区转换为字符串,这会导致文件更大,并且无法识别特殊字符,从而导致文件损坏。通过将编码指定为null,我们可以得到原始缓冲区。

    encoding - 用于响应数据的 setEncoding 的编码。如果 null,主体作为缓冲区返回。其他任何东西(包括 undefined 的默认值)将作为编码参数传递 到 toString() (这意味着默认情况下这实际上是 utf8)。 (注:如果 你期望二进制数据,你应该设置编码:null。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2016-06-23
      相关资源
      最近更新 更多