[英]Soundcloud Download Timeout
有來自soundcloud的人在看嗎? 為什么我收到有效請求的403?
我目前正在使用Titanium構建iOS應用。
我包含一項新功能,該功能允許用戶下載Soundcloud .mp3文件並從應用程序播放它們(保存到應用程序目錄中)
我編寫的代碼在某些軌道上運行良好,但在其他軌道上卻無法運行。 客戶端可以無限制地下載所有曲目,並且我大大增加了最大超時時間,它仍然僅下載約170字節,然后在某些曲目上失敗。 在其他方面,它可以毫無問題地下載整個曲目。 真的很困惑,有人有任何想法嗎?
下面是代碼,也是一個軌道正常運行的示例,如果有人可以看到差異,則該軌道不正常運行嗎?
謝謝
賈斯汀
//Download code
var newDir = Titanium.Filesystem.getFile(Titanium.Filesystem.applicationDataDirectory,'scDownloads');
newDir.createDirectory();
var id = fStripped;
var dlXhr = Titanium.Network.createHTTPClient({
timeout : 500000});
dlXhr.onload = function(){
var file = Ti.Filesystem.getFile(newDir.resolve(),id +'.mp3');
Ti.API.warn('file is: ' + file);
file.createFile();
file.write(this.responseData);
}
dlXhr.open('GET',dlURL + '?client_id=' + soundcloudClientID);
dlXhr.send();
這是幾首曲目(帶有客戶端ID)
這一項有效: https : //api.soundcloud.com/tracks/60943956/download?client_id = 7a0984726d0eefbb310771c4c02116a8
這個不是: https : //api.soundcloud.com/tracks/63980557/download?client_id=7a0984726d0eefbb310771c4c02116a8
我已經在Soundcloud的API控制台(http://developers.soundcloud.com/console)上對此進行了測試,並獲得了以下內容:
HTTP / 1.1 302臨時移動的Access-Control-Expose-Headers:日期X-運行時:20年齡:0內容長度:28 X-Cacheable:NO:Cache-Control = no-cache位置:gda = 1351783496_b465064be1b41027a7a0bf6067d83169“> http: //ak-media.soundcloud.com/kw7JNYi7HtCq?AWSAccessKeyId=AKIAJ4IAZE5EOI7PA7VQ&Expires=1351783496&Signature=UNtBsSfBh1XNvXPLSLNVzTQEclY%3D& gda = 1351783496_b6067d1:DES-A-E-Cache:B- A67E7, Bn-Control-b:緩存控制:無緩存X-清漆:1398398080訪問控制允許標頭:接受,授權,內容類型,來源日期:2012年11月1日,星期四,格林尼治標准時間訪問控制允許來源: *通過:1.1清漆內容類型:application / xml; charset = utf-8
302-找到
我還添加了一個Ti.API.debug(e.error); 到我創建的dlXhr.onerror函數,然后簡單返回
我得到“不”的403。 您應該監聽onerror事件,並適當地處理它。 另外,您應該流式傳輸文件,而不是將其保留在內存中,而不是一次全部注銷。 利用iOS上Ti.Network.HTTPClient上可用的“文件”屬性來簡單地執行此操作。 另外,請顯示進度,因為這是您要下載的巨大文件。 下面的示例演示了所有這些:
var win = Ti.UI.createWindow({
backgroundColor: 'white'
});
var progressBar = Ti.UI.createProgressBar({
max: 1, min: 0, value: 0,
left: 20, right: 20,
height: 20,
visible: true
});
win.add(progressBar);
win.open();
var fileName = 'file.mp3';
var link = 'https://api.soundcloud.com/tracks/63980557/download?client_id=7a0984726d0eefbb310771c4c02116a8';
var file = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, fileName);
var client = Ti.Network.createHTTPClient({
ondatastream: function (e) {
progressBar.value = e.progress;
},
onload: function () {
alert('Download Complete: ' + file.size);
},
onerror: function (e) {
alert(client.status);
}
});
client.open('GET', link);
client.file = file;
client.send();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.