2014-05-30 2 views
1

Я пытаюсь реализовать сборщик OneDrive. Пользователь может выбрать свои файлы, а затем, при сохранении, я могу получить эти файлы и загрузить их.WL.загрузка с несколькими файлами (OneDrive API)

Я следую OneDrive Документация по API, и я получаю эту:

WL.init({ client_id: clientId, redirect_uri: redirectUri }); 
WL.login({ "scope": "wl.skydrive wl.signin" }).then(
    function(response) { 
     openFromSkyDrive(); 
    }, 
    function(response) { 
     log("Failed to authenticate."); 
    } 
); 
function openFromSkyDrive() { 
    WL.fileDialog({ 
     mode: 'open', 
     select: 'single' 
    }).then(
     function(response) { 
      log("The following file is being downloaded:"); 
      log(""); 

      var files = response.data.files; 
      for (var i = 0; i < files.length; i++) { 
       var file = files[i]; 
       log(file.name); 
       WL.download({ "path": file.id + "/content" }); 
      } 
     }, 
     function(errorResponse) { 
      log("WL.fileDialog errorResponse = " + JSON.stringify(errorResponse)); 
     } 
    ); 
} 

function log(message) { 
    var child = document.createTextNode(message); 
    var parent = document.getElementById('JsOutputDiv') || document.body; 
    parent.appendChild(child); 
    parent.appendChild(document.createElement("br")); 
} 

В избранных вариантов, вы можете установить «сингл» или «мульти», чтобы позволить пользователю выбрать один или несколько файлов из сборщик. Но когда я пытаюсь установить 'multi', метод WL.download работает только для последнего файла.

Спасибо за помощь!

пс: я не нашел реальное решение на StackOverflow или любом форуме

ответ

3

Это причуда с функцией WL.Download(). Он создает скрытый iframe для выполнения загрузки, но он использует тот же iframe для всех загрузок, которые он делает. Поэтому, если вы быстро поставите в очередь две загрузки, она будет перемещаться по iframe дважды, и вы в конечном итоге загружаете последний файл. WL.Download() не раскрывает, когда загрузка завершена, поэтому вы не можете просто ждать завершения ее до начала следующего.

К сожалению, образец кода немного вводит в заблуждение, помещая вызовы WL.Download() в цикле for. Мы приняли к сведению эти проблемы.

В то же время, чтобы разблокировать себя, вы можете получить URL-адрес загрузки из свойства file.source и инициировать загрузку самостоятельно.

+0

Благодарим за интерес, Наконец-то мне пришлось управлять загрузкой на стороне PHP. Итак, я отправляю DownloadUrl с javascript на PHP с AJAX. Затем я использую копию, завиток или что-то еще, чтобы загрузить файл. Обратите внимание, что OneDrive предоставляет вам общедоступный URL-адрес для загрузки, который не требует авторизированного запроса. Проблема решена – LouisDev

Смежные вопросы