5

私は持っている

Dropbox からファイルをダウンロードできるサービスをクライアントに提供しようとした Web サイトがあります。開発を簡単にするために、Dropbox chooserを使用します。このために、ダウンロード元と予想されるドメインを有効に<script>し、Dropbox 自体によって提案されたタグ (対応するdata-app-key) を HTML ページに含めます。すべてが甘く機能します。

問題

次に、ユーザーが選択したファイルをダウンロードする必要があります。 Dropbox セレクターは、このための機能を提供していないようです。ファイルに関する情報を取得するだけです。私の場合、これはdirect linkファイルをダウンロードするための です。

ファイルをダウンロードするには、 //cdnjs.cloudflare.com/ajax/libs/dropbox.js/0.9.1/dropbox.min.jsDropbox.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);

しかし、これはすべて私を報告するのに失敗します:

ここに画像の説明を入力

電話しないと 、「認証されていclient.authenticateません」という通知が表示され、ファイルをダウンロードできません。

質問

この問題を解決するにはどうすればよいですか。?

4

3 に答える 3

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;
    }
}
于 2013-04-30T04:34:27.900 に答える
0

Chooser によって返されたリンクからファイルをダウンロードするために、Dropbox.js を使用する必要はありません。Dropbox.js は、Chooser とは別の Dropbox Core API を接続するためのライブラリです。client.readFile 関数は、ファイルへの URL ではなく、承認された Dropbox アカウント内のファイルへのパスを取得することを目的としています。

認証を必要としない目的のファイルへの直接リンクが既にあるため、プラットフォームで利用可能な手段を介して直接ダウンロードできます。(単純な例として、端末で curl を使用することがあります。)

于 2013-04-04T20:10:30.023 に答える