2017-08-02 27 views
0

Ich benutze die Dropbox-API, um Dateien in Dropbox hochzuladen und dann eine freigebbare Links zu generieren und diese an die Benutzer zu senden.Dropbox API - Force Direct herunterladen

Aber das Problem ist, ich möchte zwingen, die Datei anstelle der Vorschau über Dropbox Freigabe Link zu erzwingen.

Ich weiß, dass ich herunterladen zwingen kann ?dl=1 am Ende der Verbindung, sondern der gemeinsam nutzbaren Link erzeugt durch Dropbox kommt zurück mit ?dl=0

-Code Einstellung:

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); 
         } 
        }); 

       } 
     }); 

Ich bin mit dem V1 der Dropbox-API, die bald veraltet sein wird, aber jetzt muss ich sie verwenden.

Antwort

0

Mithilfe des URL-Parameters dl=1 können Sie Downloads auf diesen Links erzwingen. Sie können weitere Informationen über diese finden Sie hier:

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

dies richtig zu tun, sollten Sie einen tatsächlichen URL-Parser verwenden, um die URL zu analysieren. Wenn es bereits einen dl Parameter hat, setzen Sie es auf 1. Wenn dies nicht der Fall ist, fügen Sie den dl Parametersatz auf 1 hinzu.

0

Sie können die Vorteile von Streams nutzen und den Download-Stream einfach in den Client umleiten. Hier ist ein Beispiel mit meiner minimalistischen dropbox-v2-api Wrapper und hapijs Routenkonfiguration:

{ 
    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 
    } 
}