Kai*_*per 7 javascript redirect download cors onedrive
我正在尝试在客户端javascript中处理onedrive文件,但首先我需要一种方法来使用XMLHttpRequest来下载文件.Onedrive支持很多操作的cors,但是为了将文件下载到javascript中,存在以下问题:
如上所述:onedrive rest api手册
我可以发送请求:
获取https://apis.live.net/v5.0/FILE_ID/content?access_token=ACCESS_TOKEN
它将回复一个位置标题,将浏览器重定向到该文件.问题是当我通过XHR发送这些请求时,浏览器总是发送带有请求的Origin标头.对于我上面描述的第一个请求,onedrive还会回复一个Access-Control-Allow-Origin:*标头,因此浏览器中允许该请求.但是,当浏览器重定向到文件的实际位置时,该资源没有Access-Control-Allow-Origin标头,因此浏览器拒绝XHR请求(chrome将Origin标头设置为null重定向请求).
我也试过获取位置,但没有自动重定向,然后发送另一个XHR请求,这会将原始标题设置为我的网站的域,但结果是相同的.
正如我在开始时提到的,我需要在javascript中处理数据,所以我不会询问如何将onedrive文件下载到硬盘驱动器.我需要在网页上通过javascript访问数据.
我知道我可以使用服务器端编程为我获取文件数据然后将其发送到客户端,但对于我的应用程序,这不是一个选项(至少这不是我现在要求的).
如果没有办法做到这一点,有没有人知道为什么他们会以这种方式实现他们的api?允许javascript通过cors获取位置并重定向但不包含重定向资源的cors头.为什么不首先否认科尔?这是一个错误吗?
尽我所能告诉我的答案是,下载内容不能仅通过JavaScript在浏览器中完成。他们为什么这样做呢?您必须要问他们,但是我会猜到是一个错误,还是一些未指定的“安全问题”。对于它的价值,他们似乎认为下载内容是 CORS的文档在这里的规定:https://dev.onedrive.com/misc/working-with-cors.htm:
要在JavaScript应用中从OneDrive下载文件,您不能使用/ content API,因为它会以302重定向响应。当需要进行CORS预检时,例如提供Authorization标头时,将明确禁止302重定向。
相反,您的应用程序需要选择@ content.downloadUrl属性,该属性返回/ content将重定向到的相同URL。然后可以使用XMLHttpRequest直接请求此URL。由于这些URL是经过预先认证的,因此可以在没有CORS预检请求的情况下进行检索。
但是,据我所知,它们是错误的。仅仅因为您不需要预检请求,并不意味着该响应符合CORS。您仍然需要响应上的Access-Control-Allow-Origin标头。
大家很奇怪,这是仍然是新图形API中的问题(这基本上是一个代理API到OneDrive API,据我所知)。仍然存在相同的基本问题-您可以从商品中获得下载URL,但是该URL指向不符合CORS要求的资源,因此不会带来很多好处。
我在此处与Microsoft 有关的一个活跃问题尚未解决。我的问题得到了一些回应(我让他们通过graph API公开了下载URL),但我仍在等待看看他们是否会提出从JavaScript下载内容的真正解决方案。
如果我对此问题有解决方案或真实答案,我将尝试在此处报告,以便将来其他人可以参考。
小智 4
这不是答案,我还不能发表评论。
上周,onedrive 的新 API 发布了。http://onedrive.github.io/index.htm
不幸的是它并不能解决问题。
https://api.onedrive.com/v1.0/drive/root:{path and name}:/content?access_token={token}
Run Code Online (Sandbox Code Playgroud)
仍会重定向到某个位置的资源https://X.files.1drv.com/.X.
其中不会包含任何 Access-Control-Allow-Origin 标头。"@content.downloadUrl"JSON 响应中的Url 也是如此。
我希望微软能够在不久的将来解决这个问题,因为该 API 目前的使用非常有限,因为您无法使用 html5 应用程序处理 onedrive 中的文件内容。除了通常的文件浏览器之外。
我目前看到的唯一解决方案是 Chrome 应用程序,它可以在没有 CORS 的情况下处理 Url。请参阅https://developer.chrome.com/apps/angular_framework
| 归档时间: |
|
| 查看次数: |
1420 次 |
| 最近记录: |