我在必须访问SkyDrive文件的浏览器中运行 WEB 应用程序。
我使用WL.js
提供的良好界面来访问当前经过身份验证的用户的文件列表:
function openFromSkyDrive() {
WL.fileDialog({
mode: 'open',
select: 'single'
}).then(
function (response) {
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" }, onDownloadFileCompleted).then(
function (response) {
var r = response;
},
function (responseFailed) {
log("Error downloading file: " + responseFailed.error.message);
});
//TRIED TO USE SIMPLE GET CALL TOO, DIDN'T WORKED AS WELL
/* var url = file.link;
WL.api({ path: url,
method: "GET"
}).then(
function (response) {
log("Downloaded : " + response.name + ", ID: " + response.id)
},
function (responseFailed) {
"Error calling API: " + responseFailed.error.message;
}
); */
}
},
.....
);
}
一切都很好,干净。
当我使用WL.download
时,文件的下载开始在浏览器中,因此浏览器加载文件,但我需要的是将文件内容加载到我的javascript中,所以< strong>我可以直接从我的应用程序处理内容。
请注意,我已经尝试使用WL.api
方法和GET
以及不同的路径(我尝试了文件对象中的所有可用文件)并且失败了:或者它返回错误,或者什么都不是。
WinJS
似乎提供了XHR
调用方法,但我无法使用它,因为我正在编写Web应用程序而WinJS
仅供桌面使用。
如何处理skydrive下载/下载文件的内容?是否可以不进入手动框架创建和XHR调用定义?
答案 0 :(得分:0)
您可以像这样使用WL.api方法创建一个允许您访问该文件的链接:
WL.api({
path: file.id + "/content",
method: "GET"
}).then(
function(response) {
//URL will be in response.location, so load file content using jQuery or similar
$.get(response.location, /* etc */);
},
function(err) {
alert(err);
}
);
奇怪的是,response.location
返回的网址不需要任何身份验证 - 因此您可以通过电子邮件发送给其他人,他们也可以访问该文件。这无论文件是否在OneDrive中设置为共享。从安全的角度来看,对我来说似乎很奇怪,但我可能会遗漏一些东西。