使用JavaScript从Dropbox下载文件

时间:2013-04-03 15:46:04

标签: javascript dropbox dropbox-api

我有

我有一个网站试图向客户提供服务,以便从Dropbox下载文件。为了简化开发,我使用Dropbox chooser。 为此,我启用了我希望下载的域名,并将Dropbox自身建议的<script>标记(包含相应的data-app-key)包含到我的HTML页面中。 一切都很美好。

问题

现在我需要下载用户选择的文件。 Dropbox chooser似乎没有为此提供任何功能,它只是检索有关文件的信息。在我的例子中,这是一个direct link,用于下载文件。

要下载该文件,在我看来,我需要使用Dropbox.Client中另一个Dropbox javascript库中定义的//OPTIONS FOR DROPBOX CHOOSER var options = { linkType: "direct", // THIS FUNCITON RUNS WHEN USER SELECTS SOMETHING // FROM DOPBOX_CHOOSER success: function (files) { // DEFINE APP KET FOR DROPBOX_CLIENT (KEY, SECRET...), WHICH I GET // BY CREATING NEW "CORE API" TYPE:Full Dropbox APPLICATION ON // DROPBOX APP CONSOLE var appKey = { key: 'APP KEY', secret: 'CLIENT SECRET', sandbox: true }; //INIT CLIENT var client = new Dropbox.Client(appKey); //TRY TO AUTHENTICATE IT client.authenticate(function (error, client) { if (error) { console.log(error); } if (client.isAuthenticated()) { //READ FILES for (var i = 0; i < files.length; i++) { var file = files[i]; client.readFile(file.link, function (error, data) { if (error) { return console.log(error); // Something went wrong. } alert(data); // data has the file's contents }); } } else { console.log("Error on authentication"); } }); }, cancel: function () { } }; //OPEN DROPBOX_CHOOSER Dropbox.choose(options);

所以使用该libarry我运行这样的代码:

client.authenticate

但是这一切都没有报告我:

enter image description here

如果我不致电 {{1}}我无法下载文件,因为获取“未授权错误”通知。

问题

如何解决此问题。 ?

3 个答案:

答案 0 :(得分:3)

一个简单直接的解决方案是使用XMLHTTP,如下所示

function readDropbox(sURL) 
{
    var oRequest = new XMLHttpRequest();
    oRequest.open("GET",sURL,false);
    oRequest.onreadystatechange = function(oEvent) 
    {  
        if (oRequest.readyState === 4) 
        {  
            if (oRequest.status === 200) 
            {  
                console.log(oRequest.responseText)  
            } 
            else  
            {  
                console.log("Error", oRequest.statusText);  
            }  
        } 
    } 
    oRequest.setRequestHeader("User-Agent",navigator.userAgent); 
    try 
    {
        oRequest.send(null)
    } 
    catch (err) 
    {
        alert(err);
    }
    if (oRequest.status == 200) 
    {
        return oRequest.responseText;
    }
    else 
    {
        alert("Error - File not found in Dropbox public folder");
        return null;
    }
}

答案 1 :(得分:0)

您无需使用Dropbox.js从Chooser返回的链接下载文件。 Dropbox.js是一个用于连接Dropbox Core API的库,它与Chooser分开。 client.readFile函数用于获取授权Dropbox帐户中文件的路径,而不是文件的URL。

由于您已经拥有指向不需要身份验证的所需文件的直接链接,因此您可以通过平台可用的任何方式直接下载该文件。 (一个简单的例子可能是在终端中使用curl。)

答案 2 :(得分:0)

如果你想从你的客户端javascript代码访问Dropbox文件的内容,我建议你使用服务器端获取内容并将它们发送回客户端(使用Ajax似乎最优雅)。 通常无法从javascript代码访问当前域之外的任何URL的内容(例外是对外部JavaScript代码的引用)。