使用Horseman和PhantomJS下载wav文件,数据质量下降
Downloading a wav file using Horseman and PhantomJS losing data quality
我正在使用PhantomJS和HorsemanJS从远程服务器下载wav文件。然而,当文件被base64编码并写入新文件时,它会失去质量,从而无法使用。音频在那里,但它失真了,这让我认为这是一个编码问题。我在Ubuntu 14.04上运行,使用节点v5
下面是我的脚本,有什么想法可以改进base64编码吗?
var Horseman = require('node-horseman');
var horseman = new Horseman({cookiesFile:'./cookiejar'});
var fs = require('fs');
horseman.on("urlChanged", function(url){
console.log(url);
});
horseman.on('consoleMessage', function( msg ){
console.log(msg);
});
horseman
.userAgent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36")
.open('https://remoteserver.com/audo.aspx?guid=01439900-5361-4828-ad0e-945b56e9fe51')
.waitForNextPage()
.type('input[name="password"]', process.env.PASS)
.type('input[name="username"]', process.env.UN)
.click("button:contains('Login')")
.waitForNextPage()
.evaluate(function(){
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function base64encode(str) {
var out, i, len;
var c1, c2, c3;
len = str.length;
i = 0;
out = "";
while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = str.charCodeAt(i++);
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
return out;
}
var url = $("a:contains('Uncompressed file')").attr("href");
console.log(url);
var out;
$.ajax({
'async' : false,
'url' : url,
'success' : function(data, status, xhr) {
console.log(status);
console.log(xhr.getResponseHeader('Content-Type'));
out = base64encode(data);
}
});
return out;
})
.then(function(out){
fs.writeFile('./mydownloadedfile.txt', out, 'base64', function(){
return horseman.close();
});
});
内容类型返回为audio/wav
如果文件是手动下载并通过同一个播放器播放的,它播放得很好,只有当它经过这个过程时。
为什么不检查环境并在NodeJS中使用Buffer或在浏览器中使用
btoa()/
atob(),用于base64编码和解码:
function base64Encode(plainData) {
if(isNode) {
return new Buffer(plainData).toString('base64');
}else {
return window.btoa(plainData);
}
}
function base64Decode(encodedData) {
if(isNode) {
return new Buffer(encodedData, 'base64').toString();
}else {
return window.atob(encodedData);
}
}
在您的脚本中:
var out;
$.ajax({
'async' : false,
'url' : url,
'success' : function(data, status, xhr) {
console.log(status);
console.log(xhr.getResponseHeader('Content-Type'));
out = base64Encode(data);
}
});
return out;
})...
相关文章:
- 如何使用.log数据文件显示EXT-js网格
- 如何在javascript中使用会话特定的数据文件
- 数据文件出现 D3 错误
- HTML 对象数据文件(如果未找到)
- 在 JSFiddle 中链接外部 JSON 数据文件
- 如何从 SDK 插件数据文件夹加载 DLL
- 使用 jquery 从 json 数据文件动态填充选择元素
- 节点模块包括数据文件作为全局变量
- 如何获取 HTML 标记的“数据文件”属性的内容
- 在 d3.js 散点文件中使用数据数组而不是外部数据文件
- 我用PHP调用的数据文件神秘地被更改了.用户是否覆盖了它
- 从数据文件导入数组
- 谷歌驱动器API应用程序数据文件夹,是真的那么困难
- XML数据文件已更改,但更改不会;t出现在gmaps中的html页面上
- 大文件(超过~2Mb)上传-引发错误“;键'数据文件'在<MultiValueDict:{}>
- 将数据文件转换为blob
- 如何使用链接检索整个数据文件(ajax?)
- firefox(9),javascript,由于大数据文件导致分配大小溢出.有什么办法可以避免这种情况吗
- 我们可以在json数据文件中添加图像,并使用D3.js在页面上调用它
- IANA (Internet Assigned Numbers Authority)数据文件和来自www.timeand