2012-10-30 83 views
2

有人從soundcloud看這個嗎?爲什麼我得到一個有效的請求403?Soundcloud下載超時

我正在使用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移動/暫 訪問控制 - 暴露 - 接頭: 日期 X-運行時間:年齡:的Content-Length: X緩存的: NO:緩存控制=無緩存 位置: GDA = 1351783496_b465064be1b41027a7a0bf6067d83169" > http://ak-media.soundcloud.com/kw7JNYi7HtCq? AWSAccessKeyId = AKIAJ4IAZE5EOI7PA7VQ &到期= 1351783496 &簽名= UNtBsSfBh1XNvXPLSLNV zTQEclY%3D & GDA = 1351783496_b465064be1b41027a7a0bf6067d83169 訪問控制允許的方法: GET,PUT,自檢,DELETE 連接: 接近 服務器: nginx的 X-緩存: MISS 的Cache-Control: 沒有-cache X-光油:訪問控制允許報頭: 接受,授權,內容類型,產地 日期: 星期四,2012 GMT 15時24分36秒 訪問控制 - 允許 - 年11月1起源: * Via: 1.1 varnish Content-Type: application/xml;字符集= UTF-8

302 - 實測值

我還添加了Ti.API.debug(e.error);到dlXhr。onerror函數我已經創建,並且這只是返回

回答

1

我得到一個「不」的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(); 
+0

道森嗨,我將添加onError的功能,只是還沒有得到那麼遠呢,流媒體已經在應用程序和工作正常(有一個版本,現在沒有問題住),這裏的要點是下載問題是一致的,而不是隨機的。某些軌道工作,其他人不會讓我想知道這是否與Soundcloud有關。 –

+0

所以我剛剛捕獲了一個錯誤....它是無用的。 {source =「[object TiNetworkClient]」; type = error;這是從字面上說,所有它說 –

+0

如果你看看client.status,你會看到你得到了一個403. –