2017-08-02 151 views
0

我使用Dropbox API將文件上傳到Dropbox,然後生成可共享鏈接並將其發送給用戶。Dropbox API - Force直接下載

但問題是我想強制下載文件,而不是通過dropbox共享鏈接預覽。

我知道我可以強制下載的鏈接,但通過下拉框產生的共享鏈路的末端設置?dl=1?dl=0

代碼回來:

request.put('https://api-content.dropbox.com/1/files_put/auto/reports/' + req.body.Name +'.pdf', { 
       headers: { 
        Authorization: 'TOKEN', 
        'Content-Type': 'application/pdf' 
       }, 
       body: content 
      }, function optionalCallback(err, httpResponse, bodymsg) { 
       if (err) { 
        console.log(err); 
       } 
       else { 
        console.log("File uploaded to dropbox successfully!"); 
        fs.unlink(temp_dir + 'report.pdf', function(err) { 
         if (err) 
          throw err; 
         else { 
          console.log("file deleted from server!"); 
         } 
        }); 
        request.post('https://api.dropboxapi.com/1/shares/auto/reports/' + req.body.Name + '.pdf'+ '?short_url=false?dl=1', { 
         headers: { 
          Authorization: 'TOKEN' 
         } 
        }, function optionalCallback(err, httpResponse, bodymsg) { 
         if (err) { 
          console.log(err); 
         } 
         else { 
          console.log('Shared link 2 ' + JSON.parse(httpResponse.body).url); 
          res.json(JSON.parse(httpResponse.body).url); 
         } 
        }); 

       } 
     }); 

我現在用的是V1 Dropbox API將很快被棄用,但現在我需要使用它。

回答

0

使用dl=1 URL參數是在這些鏈接上強制下載的正確方法。你可以找到更多的相關信息,在這裏:

https://www.dropbox.com/help/desktop-web/force-download

要正確地做到這一點,你應該使用一個實際的URL解析器解析URL。然後,如果它已經有dl參數,請將其設置爲1。如果不是,則將dl參數集添加到1

0

您可以利用流並將下載流重定向到客戶端。下面是使用我的簡約dropbox-v2-api包裝和hapijs路線配置的示例:

{ 
    path: '/getFile', 
    method: 'GET', 
    handler: (request, response) => { 
     dropbox({ 
      resource: 'files/download', 
      parameters: { 
       path: '/dropbox/image.jpg' 
      } 
     }, (err, result) => { 
      //download completed 
     }).pipe(response); //piping file stream 
    } 
}