从dropbox下载用户文件 - javascript

时间:2014-11-18 20:58:03

标签: jquery api dropbox

我想下载用户从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错误

2 个答案:

答案 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或添加任何授权方法。