Dropbox JS SDK:将filesListFolder与检索链接相结合

时间:2016-09-14 11:52:54

标签: javascript sdk dropbox dropbox-api

我刚开始使用Dropbox JavaScript SDK在WordPress项目中列出产品说明书。它已经开始很好地列出了与产品标题相匹配的相应PDF文件(代码向下),但我想检索一个公共链接供人们下载。我开始查看SDK中包含的示例,但它需要一个共享链接 - 这是我想要检索的,对(不确定我是否混淆了这些条款)?对象输出不包括共享链接,而是ID和相对路径(如果有帮助的话)。

当前代码:

function listFiles() {
    var ACCESS_TOKEN = '*******';
    var dbx = new Dropbox({ accessToken: ACCESS_TOKEN });
    dbx.filesListFolder({path: '/Product Data Sheet/<?php echo $dbx_line; ?>/<?php echo $dbx_category; ?>/<?php echo ICL_LANGUAGE_NAME_EN; ?>/'})
    .then(function(response) {
        displayFiles(response.entries);
        console.log(response);
    })
    .catch(function(error) {
        console.error(error);
    });
    return false;
}

function displayFiles(files) {
    var filesList = document.getElementById('files');
    var li;
    for (var i = 0; i < files.length; i++) {
        li = document.createElement('li');
        var name = files[i].name.slice(4).slice(0, -7),
                name = name.replace('_', '/');
        if( name === '<?php echo $dbx_name; ?>') {
            li.appendChild(document.createTextNode(name));
            filesList.appendChild(li);
        }
    }
}

listFiles();

JS控制台输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

新的Dropbox API记录很少 - 我只花了一天左右的时间。

1)您的列表文件看起来不错

var dbx = new Dropbox({ accessToken: ACCESS_TOKEN });
dbx.filesListFolder({path: ""})
.then(function(response) {
    console.log(JSON.stringify(response, null, 4));
})
.catch(function(error) {
    console.error(error);
});

结果类似于以下

{
"entries": [
    {
        ".tag": "folder",
        "name": "Apps",
        "path_lower": "/apps",
        "path_display": "/Apps",
        "id": "id:XYZ",
        "$$hashKey": "object:175"
    },
    {
        ".tag": "file",
        "name": "Getting Started with Dropbox.pdf",
        "path_lower": "/getting started with dropbox.pdf",
        "path_display": "/Getting Started with Dropbox.pdf",
        "id": "id:XYZ",
        "client_modified": "2016-04-10T19:24:04Z",
        "server_modified": "2016-04-10T19:24:01Z",
        "rev": "14703ce11",
        "size": 1142545,
        "$$hashKey": "object:180"
    }
],
"cursor": "XYZ",
"has_more": false
}

2)现在使用上面的内容为文件创建一个共享链接(doc说它只返回链接,如果存在的话)。

请注意&GT;&GT;我不确定pathLower是否需要,但我只是假设它是

  dbx.sharingCreateSharedLink({path: **pathLower_to_your_file**})
  .then(function(response) {
      console.log(response.url);
   })
  .catch(function(error) {
      console.error(error);
  });

};

这将产生如下内容

{
    ".tag": "file",
    "url": "https://www.dropbox.com/s/**your  id**/Getting%20Started%20with%20Dropbox.pdf?dl=0",
... // omitted for brevity
}

3)最后,您可以使用URL来检索文件,例如

wget https://www.dropbox.com/s/**your  id**/Getting%20Started%20with%20Dropbox.pdf?dl=0

**进一步的工作表明dropbox使用HTTP转发,节点请求有问题。我使用了fetch,它就像一个带有转发https://www.npmjs.com/package/node-fetch

的魅力
fetch(req.body.url, {
    method: 'GET'
    , redirect: 'follow'
    , follow: 20
    , timeout: 0
})
.then(function(res) {
    s3.createBucket(bucket_params, function(err) {
        if(err){
          console.log(err);
        }else{
        var s3obj = new AWS.S3({params: {Bucket: bucket_name, Key: file_name}});
        s3obj.upload({Body: res.body}).
       on('httpUploadProgress', function(evt) { console.log(evt); }).
       send(function(err, data) {
           if(err){
              console.log("error uploading data" + err);
           }else {
              console.log("Success!!!!!") }
       })
    }
  });

});