2012-10-30 86 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. –