有人从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暂时移动 访问控制展露报头: 日期 X-运行: 20 年龄: 0 内容长度: 28 X-可缓存: NO:缓存控制=无缓存 地点: GDA = 1351783496_b465064be1b41027a7a0bf6067d83169" > HTTP://ak-media.soundcloud.com/kw7JNYi7HtCq AWSAccessKeyId = AKIAJ4IAZE5EOI7PA7VQ&安培;过期= 1351783496&安培;签名= UNtBsSfBh1XNvXPLSLNVzTQEclY%3D&安培;的 GDA = 1351783496_b465064be1b41027a7a0bf6067d83169 访问控制允许的方法: GET,PUT,POST,DELETE 连接: 关 服务器: nginx的 X-缓存: 小姐 缓存控制: 无缓存 X-光油: 1398398080 访问控制允许报头: 接受,授权,内容类型,来源 日期: 星期四,2012年11月1日15:24:36 GMT 访问控制允许来源: * 通过: 1.1清漆 内容类型: 应用/ XML;字符集= UTF-8
302 - 找到了
我还添加了一个Ti.API.debug(e.error);到我创建的dlXhr.onerror函数,这只是返回
答案 0 :(得分: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();