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。