带有多个文件的WL.download(OneDrive API)

时间:2014-05-30 07:55:31

标签: onedrive

我正在尝试实施OneDrive选择器。用户可以选择他的文件,然后在保存时,我可以获取这些文件并下载它们。

我遵循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"));
}

在选择选项中,您可以设置单个&#39;或者&#39; multi&#39;允许用户从选择器中选择一个或多个文件。 但是当我尝试设置多个&#39;时,WL.download方法仅适用于最后一个文件。

感谢您的帮助!

ps:我没有在stackoverflow或任何论坛上找到真正的解决方案

1 个答案:

答案 0 :(得分:3)

这是WL.Download()函数的怪癖。它会创建一个隐藏的iframe来执行下载,但它会对所有下载使用相同的iframe。因此,如果您快速连续排队两次下载,它将导航iframe两次,您只会最终实际下载最后一个文件。下载完成后,WL.Download()不会公开,所以你不能在开始下载之前等待一个完成。

不幸的是,代码示例有点误导,将WL.Download()调用置于for循环中。我们已经注意到了这些问题。

与此同时,要取消阻止自己,您可以从&#39; file.source&#39;获取下载网址。财产并自行启动下载。