我想下载用户从dropbox中选择的文件 - 到目前为止,我已使用javascript和API列出用户文件。
当用户选择文件时,我所拥有的唯一信息是路径(不是完整路径,例如'/ getting started.pdf')
用户已经授权我的应用程序访问他们的文件数据,所以我有一个访问令牌,但我无法弄清楚我需要下载文件的直接网址。
我一直在尝试使用这些网址:
https://dl.dropboxusercontent.com/1/view/XXXXXXXXXXXXXXXXX/getting started.pdf
https://dl.dropboxusercontent.com/s/XXXXXXXXXXXXXXXXX/getting started.pdf
但即使设置了“授权”标题,我也总是得到401未授权。我该如何下载文件?而且,应该用什么数字代替XXXXXXXXXXXXX?我已经尝试了我的app id和app secret,但似乎没有任何效果。
我的代码的基础是:
var access_token = 'XXXXXXXXXXXXXXXXXXXXXXXX';
var api_secret = 'XXXXXXXXXXXXX';
var api_key = 'XXXXXXXXXXXXXXX';
$('body').on('click', '.dropbox-doc', function(event){
var path = $(this).data().path;
$.ajax({
url: 'https://dl.dropboxusercontent.com/1/view/'+api_key+path+'?dl=1',
dataType:'json',
headers: {
'Authorization':'Bearer '+access_token,
},
success: function(data){
console.log('success')
console.log(data)
},
error: function(data){
console.log(data)
}
});
});
我也尝试在新窗口中打开url而不是ajaxing,我得到同样的401错误
答案 0 :(得分:0)
这对我有用:
// file path example
var path = 'projects/client/design/jpgs/image.jpg';
$.ajax({
url: 'https://api.dropbox.com/1/media/auto/'+path,
type: 'POST',
dataType : 'json',
headers: {
'Authorization':'Bearer '+access_token
},
})
.done(function (data) {
console.log("success", data);
})
.fail(function (data) {
console.log("error", data);
})
你是AJAXing的路径看起来更像是从这个请求返回的URL。
答案 1 :(得分:0)
如果您正在使用official Dropbox JavaScript SDK,则只需使用readFile
方法从已授权您的应用的用户的帐户下载文件内容:
https://www.dropbox.com/developers/datastore/docs/js#Dropbox.Client.readFile
如果您不使用该SDK,则可以直接使用/ files(GET)端点:
https://www.dropbox.com/developers/core/docs#files-GET
此API调用需要使用访问令牌进行正常签名。有一些博客文章介绍了如何正常执行此操作:
https://www.dropbox.com/developers/blog/20/using-oauth-10-with-the-plaintext-signature-method https://www.dropbox.com/developers/blog/45/using-oauth-20-with-the-core-api
您在问题中使用的网址是API返回的特殊网址,您不应修改这些网址。修改它们会导致它们中断,因为它们包含随机生成的标记(不是您的应用程序密钥/密钥或用户的访问标记)。
如果您确实需要通过/ 1 / view /或/ s / links下载内容(分别使用/media和/shares通过API检索),例如,当您不在时# 39; t具有访问令牌,您可以通过正常的网络请求执行此操作,而无需修改URL或添加任何授权方法。