Проблемы с загрузкой файлов с помощью Dropbox JavaScript SDK

Я пытаюсь загрузить файл в само Webapp на стороне клиента, используя Dropbox Javascript SDK.

Я хочу прояснить, что я хочу только загрузить файл в папку в веб-приложении; Я понимаю, что из-за соображений безопасности это на самом деле не может быть возможным.

Я следую за документацией, предоставленной в:

http://dropbox.github.io/dropbox-sdk-js/index.html

http://dropbox.github.io/dropbox-sdk-js/Dropbox.html

Это мой код контроллера:

$scope.testDownload = function() {
  console.log('Testing Download');
  dbx.filesDownload( {path: '/Collorado Springs.jpg'} ) // Just a test file
    .then(function(response) {
      console.log(response);
    })
    .catch(function(error) {
      console.log(err);
  });
};

Я определенно вижу, что загрузка происходит, как показано в инструменте Chrome Network, как показано ниже:

(У меня недостаточно репутации для вставки нескольких ссылок, поэтому, пожалуйста, вставьте эту общую ссылку, которую я создал)

https: // www.dropbox.com/s/s0gvpi4qq2nw23s/dbxFilesDownload.JPG?dl=0

Я считаю, что либо мне не хватает знаний о работе с загрузками файлов, либо я неправильно использую JavaScript.

Заранее благодарю за любую помощь, которую вы можете оказать.

2 ответа

Решение

Если вы хотите загружать и использовать файлы в веб-приложении, то гораздо лучше настроить внутренний сервер и использовать его для временного хранения контента, конечно же, с разрешения пользователей.

Для этого сделайте HTTP-запрос, затем используйте Express, чтобы обработать запрос, вызвав сервер Dropbox, а затем используйте такой код:

'use strict';
var Dropbox = require('dropbox');
var fs = require('fs');
var path = require('path');

exports.downloadFile = function(token, id, eventID, fileType, callback) {
  var dbx = new Dropbox({ accessToken: token });  // creates post-auth dbx instance
  dbx.filesDownload({ path: id })
    .then(function(response) {
      if(response.fileBinary !== undefined) {
        var filepath = path.join(__dirname, '../../images/Events/' + eventID + '/' + fileType + '/Inactive/', response.name);
        fs.writeFile(filepath, response.fileBinary, 'binary', function (err) {
          if(err) { throw err; }
          console.log("Dropbox File '" + response.name + "' saved");
          callback('File successfully downloaded');
        });
      }
    })
    .catch(function(err) {
      console.log(err);
      callback('Error downloading file using the Dropbox API');
    })
}

module.exports = exports;

Есть способ сделать это и на клиенте без необходимости развертывания собственной реализации сервера, как предлагает принятый ответ.

Для всех, у кого есть эта проблема, вы можете использовать API.

Другие вопросы по тегам