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 临时移动 访问控制公开 header : 日期 X-运行时: 20 年龄: 0 内容长度: 28 X-可缓存: NO:Cache-Control=无缓存 地点: gda=1351783496_b465064be1b41027a7a0bf6067d83169">http://ak-media.soundcloud.com/kw7JNYi7HtCq?AWSAccessKeyId=AKIAJ4IAZE5EOI7PA7VQ&Expires=1351783496&Signature=UNtBsSfBh1XNvXPLSLNVzTQEclY%3D&gda=1351783496_b465064be1b41027a7a0bf6067d83169 访问控制允许方法: 获取、放置、发布、删除 联系: 关 服务器: nginx X缓存: 错过 缓存控制: 无缓存 X-清漆: 1398398080 访问控制允许 header : 接受、授权、内容类型、来源 日期: 2012 年 11 月 1 日星期四 15:24:36 GMT 访问控制允许来源: * 通过: 1.1清漆 内容类型: 应用程序/xml;字符集=utf-8
302 - 找到
我还添加了一个 Ti.API.debug(e.error);到我创建的 dlXhr.onerror 函数,这只是返回
最佳答案
对于“不”的那个,我得到了一个 403。您应该监听 onerror 事件,并适本地处理它。此外,您应该流式传输文件而不是将其保存在内存中而不是一次写出所有文件。利用 iOS 上 Ti.Network.HTTPClient 上可用的"file"属性来简单地执行此操作。另外,显示进度,因为您要下载的文件很大。下面的示例演示了所有这些:
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();
关于ios - Soundcloud 下载超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148279/