在Node中同步下载文件的问题

时间:2018-09-06 01:43:55

标签: javascript node.js

使用多种方法下载文件并在本地应用程序中同步写入文件(当前使用名为download-file-sync的模块),使用writeFileSync编写的文件存在问题。

这是我的代码:

var downloadFileSync = require('download-file-sync');
fs.writeFileSync("twc.mp4", downloadFileSync(sourceURLEncoded));

现在,从技术上讲,这是在写 something ,并且在Notepad ++中打开文件至少显示出该文件的开头与通过Chrome下载的相同文件相同,但行数相同。但是,文件大小大约是原来的两倍:

Downloaded MP4 files. Chrome download is 5,723 KB. Node download is 10,339 KB.

Chrome下载不会播放Node下载,

如何在Node中成功完成同步文件下载?

1 个答案:

答案 0 :(得分:0)

原因是download-file-sync调用curl并在需要“纯”字节时将结果编码为字符串。

如果该字符串不是有效的UTF-8,则可能会扩展某些字符,从而导致其大小和内容与原始二进制文件不同。

要解决此问题,您只需将模块替换为其使用的代码,然后在使用buffer(默认值)进行编码的情况下创建一个新函数:

function downloadFileSync(url) {
  return require('child_process')
    .execFileSync('curl', ['--silent', '-L', url]); // remove options {encoding: 'utf8'}
}

并尝试使用它。