Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在节点中同步下载文件的问题_Javascript_Node.js - Fatal编程技术网

Javascript 在节点中同步下载文件的问题

Javascript 在节点中同步下载文件的问题,javascript,node.js,Javascript,Node.js,使用多种方法下载文件并在本地应用程序中同步写入(当前使用名为download file sync的模块),我在使用writeFileSync写入文件时遇到问题 这是我的密码: var downloadFileSync = require('download-file-sync'); fs.writeFileSync("twc.mp4", downloadFileSync(sourceURLEncoded)); 现在,从技术上讲,这是在写东西,在Notepad++中打开文件显示,至少文件的开头与

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

这是我的密码:

var downloadFileSync = require('download-file-sync');
fs.writeFileSync("twc.mp4", downloadFileSync(sourceURLEncoded));
现在,从技术上讲,这是在写东西,在Notepad++中打开文件显示,至少文件的开头与通过Chrome下载的相同文件相同,行数相同。但是,文件大小大约是原来的两倍:

节点下载不会播放,而Chrome下载会播放

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

原因是当需要“纯”字节时,调用curl并将结果编码为字符串

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

要修复此问题,您只需使用模块使用的代码替换模块,并创建一个新函数,其中您使用
缓冲区
(默认值)进行编码:

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

试试看。

这只是个主意,但你可以尝试下载一个小文件(比如,一个只有几个字符的文件),然后比较每个文件的文本内容,只是想知道在检查保存的数据长度时有什么不同。你使用了一个npm模块来编写4行代码?我猜这与编码有关-在NPM模块中,它被硬编码为mp4文件的
{encoding:'utf8'}
,我想你会想要二进制编码也许一个文件仍然被编码,需要解码。
下载文件同步
只需启动一个子进程来运行CURL。不要使用
下载文件同步
。它从原始音频数据返回UTF8编码的字符串,该字符串不会保留原始字节。JavaScript字符串的编码在已保存文件的编码中不起作用。唯一相关的编码是
download file sync
中指定的编码,以及
fs.writeFileSync()
参数为字符串时的默认编码,该参数也是UTF8。