Uzak bir sunucudan bir wav dosyası indirmek için PhantomJS ve HorsemanJS kullanıyorum. Ancak, dosya base64 kodlandığında ve yeni bir dosyaya yazıldığında, kullanılamaz hale getiren kaliteyi kaybeder. Ses var ama onun çarpıtılmış hali beni bir kodlama problemi olduğunu düşünmeme yol açıyor. Ubuntu 14.04 üzerinde no v5Horseman ve PhantomJS'yi kullanarak veri dosyasını kaybetmek için bir wav dosyası indirme
kullanarak çalıştırıyorum. Aşağıda benim betiğimde base64 kodlamasını geliştirmek için herhangi bir fikir var mıdır? dosya elle indirilen ve ince oynar aynı oynatıcı üzerinden oynanır Eğer
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 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/";
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();
});
});
içerik türü bu süreç boyunca gittiğinde, sadece geri audio/wav
olarak gelir.
Bu daha fazla bilgiye ihtiyaç duyar. Özellikle dosyayı indirip kaydedebilir misiniz? Yanlış zaman dizilimini çeken bir kodek gibi görünüyor, ancak örnek bir wav dosyasına ihtiyaç var. –
Daha az kod içeren bir dosyayı PhantomJS yerine CasperJS ile indirebilir ve temel çözümü base64 üzerinden kullanmanız gerekmeyecektir. – st2erw2od
@ st2erw2od CasperJS'ye bakacağım ama orijinal olarak incelediğimde bağımsız bir dosyaya sahip olsaydım, bu yüzden dosya ile ilgili bir şey yapamadım (S3 üzerinde sakla) – thegogz