最近有个需求是要能把企业域上的 shareponit 的文件在自己的网站上进行预览/下载,之前想法是通过存储共享的 url 来实现,但实际试了试发现并不可行,只有生成特定 iframe 的 url 才可以嵌入在页面中,有没有对 sharepoint 熟的老哥们能指条明路,谢谢了,咚咚咚
1
caomingjun 16 天前
可以用微软的 API 啊,可以参考以下 Alist 是怎么实现的
|
![]() |
2
Actrace 16 天前
传到钛盘,然后生成直链。
|
![]() |
3
TanKuku 16 天前
可以试试 sharepoint api 或者 graph api ,后端包一层
|
4
linuxsir2020 16 天前
- Graph API
- 先从 MS SPO 通过 onedrive shortcut 同步到本地再上传 ? 可能涉及到权限,2FA 和 Condition Access 、数据监管等等问题.... 得先确认能搞不, 呵呵. |
5
ukuq 16 天前
可以参考下这个,很早之前探索的,不知道还能不能用,https://www.onesrc.cn/p/how-to-call-api-for-onedrive-account-without-administrator.html
|
6
h0099 15 天前
From: "n0099" <[email protected]>
Date: 2021-04-20, 08:13 To: "Gao Yuan3" <[email protected]> CC: "office365support" <[email protected]>, "OTS_SPO" <[email protected]> Subject: Re:SR_2021041390874_SharePoint 服务端不支持 method 为 OPTIONS 的浏览器 CORS preflight 请求 没有了,十分感谢您这一周来的工作 ------------------ Original ------------------ From: "Gao Yuan3"<[email protected]>; Date: Tue, Apr 20, 2021 02:10 PM 用户您好, 这个 test.aspx 文件是属于您的 OneDrive 文件,访问时要在具有权限的前提下访问,例如登录您这个 OneDrive 文件所在的账号,才可以访问这个文件的数据。 ![]() 没有权限而直接去访问,是会提示登录的: ![]() ![]() 如果这个类型的文件(aspx)允许通过匿名链接进行对外共享,那么外部用户无需具有权限,直接就可以访问。但是由于微软很早之前就取消了公共网站(任何人都可以访问),虽然通过将 aspx 文件设置为主页的方式并通过匿名链接共享可以达到公共网站的效果,但是由于已经取消了公共网站,aspx 文件也是不可以通过匿名链接的方式对外共享的,综上目前是无法通过匿名链接的方式共享 aspx 文件的 https://support.microsoft.com/zh-cn/office/%E8%A6%81%E5%81%9C%E7%94%A8%E7%9A%84-sharepoint-%E5%85%AC%E5%85%B1%E7%BD%91%E7%AB%99-e86bfd2f-5c7d-446f-a430-7cfcc0130916?ui=zh-CN&rs=zh-CN&ad=CN ![]() ![]() 请问您对此工单是否还有其他疑问?谢谢。 ------------------ Original ------------------ From: n0099 <[email protected]> Sent: 2021 年 4 月 20 日 5:46 我删除所有文件后重新上传可以正常访问了,但如何让它可以被公网访问?现在不带 cookie 访问 https://n0099.sharepoint.cn/sites/test/Shared%20Documents/test.aspx 会重定向到 o365 登录页 ------------------ Original ------------------ From: "n0099"<[email protected]>; Date: Tue, Apr 20, 2021 05:01 AM 我已经执行过了 Set-SPOSite -Identity https://n0099.sharepoint.cn/sites/test -DenyAddAndCustomizePages $false html 里没有任何注释标签,内容如下: <html> <head> <title>test</title> </head> <body> <div id="root"></div> <script src="https://unpkg.com/react/umd/react.development.js"></script> <script src="https://unpkg.com/react-dom/umd/react-dom.development.js"></script> <script> const e = React.createElement; ReactDOM.render( e('div', null, 'Hello World'), document.getElementById('root') ); </script> <img src="https://placeimg.com/640/480/any/grayscale" /> </body> </html> 但还是弹出浏览器下载 ------------------ Original ------------------ From: "Gao Yuan3"<[email protected]>; Date: Mon, Apr 19, 2021 04:47 PM 用户您好, 请问您对此工单是否还有其他疑问,是否可以关闭归档此工单?期待您的消息。 ------------------ Original ------------------ From: Gao Yuan3 Sent: 2021 年 4 月 19 日 12:26 用户您好, 由于我们的技术支持范围不涉及开发,对这一部分接触也不是很多。 据我们了解,改 Set-SPOSite -Identity https://gytest.sharepoint.cn/sites/test -DenyAddAndCustomizePages $false 后,弹出下载文件可能是注释的问题,当 ASPX 文件中出现 HTML 的注释语言<!-- -->不是很多的时候,是可以允许一定的容错的,但是这种非标准的注释有很多的时候,就会有问题了。 您可以尝试将有问题的 ASPX 文件复制一份,然后将副本中所有的“<!—”替换成“<%--”,所有的“-->”替换成“--%>”,再上传此副本到云端来测试打开。 我这边测试可以在网页端直接打开了。 ![]() ![]() ![]() 修改之前 ![]() ------------------ Original ------------------ From: n0099 <[email protected]> Sent: 2021 年 4 月 17 日 14:57 我之前已经在 3.中说明了你们设置了 acao:* response header 就是为了允许跨域请求下载的,但忘了设置 options 请求所以无法响应需要 preflight 的跨域请求(在此是带 range 分段下载文件 header 请求会让浏览器触发 preflight ) 刚才研究了下 spo 如何托管 htmljs: https://techcommunity.microsoft.com/t5/sharepoint/open-html-files-in-browser-sharepoint-online/m-p/130620 https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-permissivesetting https://docs.microsoft.com/en-us/sharepoint/allow-or-prevent-custom-script 我已经用 management shell 执行了 Set-SPOsite <SiteURL> -DenyAddAndCustomizePages 0 ,但截至目前访问 spo 文档中的.aspx 文件仍然是弹出浏览器下载文件而不是浏览器显示 html ------------------ Original ------------------ From: "Gao Yuan3"<[email protected]>; Date: Sat, Apr 17, 2021 08:31 AM 您好, 感谢您的回复。 设置/允许跨域请求数据,这个如果在本地 SPO 服务器上面应该是可以设置的,设置后浏览器 fetch OneDrive 的文件起码是能 promise 的,但是如果在 online 端,这些都是由后台的设置决定的,作为最终用户我们无法更改后台的设置,如果被 CORS policy 阻止,应该就是不可跨域,实在抱歉。 关于托管自定义 html js ,由于我们并非开发团队,平时主要处理的都是 SPO 使用上的问题,这个说实话平时也没怎么接触过这类问题,我找工作日时间和同事沟通了解一下再给您回复吧。 ------------------ Original ------------------ 发件人: n0099 <[email protected]> 发送时间: Saturday, April 17, 2021 7:16:16 AM 收件人: Gao Yuan3 <[email protected]> 抄送: office365support <[email protected]>; OTS_SPO <[email protected]> 主题: Re:SR_2021041390874_SharePoint 服务端不支持 method 为 OPTIONS 的浏览器 CORS preflight 请求 请问 sharepoint online 可以托管自定义 html js 吗?如果你们实在不愿意兼容 preflight 请求恐怕我只能直接托管到 sharepoint.cn 域上了 ------------------ Original ------------------ From: "Gao Yuan3"<[email protected]>; Date: Fri, Apr 16, 2021 04:47 PM 用户您好, 涉及到前端开发,以及跨域请求的问题,我这边也确实不是很了解,感谢您的理解。 https://www.21vbluecloud.com/office365/usersupport_o365/ ![]() 对此类问题,我们所接触到的资源也很有限,无法给您提供更多信息,这个工单就给您关闭了。 如果您之后遇到与 O365 服务本身相关的问题,欢迎您再联系我们。 再次感谢您的理解。 ------------------ Original ------------------ From: n0099 <[email protected]> Sent: 2021 年 4 月 15 日 23:31 1.我知道这个问题属于自定义开发范围的问题,但你们解决这个问题并不困难,例如 iis10 中只需要改动几行配置即可实现: https://docs.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference 、https://blogs.iis.net/iisteam/getting-started-with-the-iis-cors-module 2.并不是我想要主动发 options 请求,而是浏览器为了检查服务端是否允许 cors (在这里是询问是否允许 range header ,也就是 Access-Control-Request-Headers: Range ),才去发送 preflight 请求,服务端应该返回具体允许的 cors 范围(在这里是 Access-Control-Allow-Headers: Range ),而不是 http405 或者你们所说的未支持 options method ![]() 而且这个 405 响应中的 allow header ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Allow )也写了 options ,这与文档并不符 3.最开始我提到过“而在其他 GET 请求中 response header 中有设置 Access-Control-Allow-Origin: *,所以可以跨域请求” 例如 ![]() 只要 request header 中有 origin (不论值如何),response header 中都会有 access-control-allow-origin: *,也就是服务端允许来自任何域的 cors 请求,因此你们设计上是允许跨域请求此 api 的,但由于某些原因没有设置 preflight 请求的响应,导致需要 preflight 的 cors 请求无法进行 ------------------ Original ------------------ From: "Gao Yuan3"<[email protected]>; Date: Thu, Apr 15, 2021 07:57 PM 用户您好, 浏览器的请求机制,我这边也不是很了解,因为涉及到开发,对此类问题我们的支持也比较有限。 但是可以看到 OPTIONS 这个请求方式就是不支持的。 ------------------ Original ------------------ 发件人: n0099 <[email protected]> 发送时间: Thursday, April 15, 2021 7:35:17 PM 收件人: Gao Yuan3 <[email protected]> 主题: Re:SR_2021041390874_SharePoint 服务端不支持 method 为 OPTIONS 的浏览器 CORS preflight 请求 产品设计不支持 cors preflight 从而导致浏览器内无法跨域请求? ------------------ Original ------------------ From: "Gao Yuan3"<[email protected]>; Date: Thu, Apr 15, 2021 10:51 AM 用户您好, 感谢您的回复,由于我们这边是 O365 云端服务的支持团队,技术支持限于 Office 365 在线服务本身的故障或使用方面的问题,如果涉及到自定义开发,对于浏览器的调用机制,我这边也不是很了解,对此类问题我们的支持也比较有限,非常感谢您的理解。 https://www.21vbluecloud.com/office365/usersupport_o365/ ![]() 以 user 为例,可以看到 OPTIONS 方法就是不被支持的,此限制为产品设计。 ![]() GET 是可以的。 ![]() 请问您对该工单是否还有其他疑问?谢谢。 ------------------ Original ------------------ From: n0099 <[email protected]> Sent: 2021 年 4 月 14 日 16:54 但我需要在浏览器内调用 graph api ,而浏览器会发送 method 为 options 的 cors preflight 请求,这并不是我要发送的 如果浏览器通不过 preflight 就不会发出我实际要发出的 get 请求 ------------------ Original ------------------ From: "Gao Yuan3"<[email protected]>; Date: Wed, Apr 14, 2021 11:08 AM 用户您好, OPTIONS 并不是我们常见的一个获取数据的方法,此方法可能就是不被支持的。 常用的方式是通过 Graph API 来获取数据,可以从官方文档中看到,也是只支持 GET 方法,没有 OPTIONS 方法 https://docs.microsoft.com/en-us/graph/use-the-api?view=graph-rest-1.0 ![]() ![]() ------------------ Original ------------------ From: Gao Yuan3 Sent: 2021 年 4 月 13 日 19:31 用户您好, 根据您对问题的描述,我谨在此阐述我们双方针对这个问题所涉及范围界定: 问题定义:需要在浏览器前端中使用 range header 下载部分文件内容,但由于 SharePoint 服务端对任何 options 请求都返回 405 导致浏览器无法通过 cors preflight 进而发出实际跨域请求,而在其他 GET 请求中 response header 中有设置 Access-Control-Allow-Origin: *,所以可以跨域请求 ![]() ![]() 问题范围:我们将协助您解决该问题,并将在该问题解决后关闭此工单。(不在 O365 技术支持范围内的问题除外) 接下来,我们将开始合作解决这个问题。如果您对以上的问题范围界定有任何异议,请尽快告知。如果您有其他任何疑问,也欢迎随时与我联系。 ------------------ Original ------------------ From: Gao Yuan3 Sent: 2021 年 4 月 13 日 19:09 尊敬的 n0099 先生/女士 : 您好!感谢您联系世纪互联 Office 365 技术支持中心。我是 Office 365 技术支持工程师 Cowan ,很高兴有机会协助您处理问题! 您可以随时通过该工单号码 SR_2021041390874 与我们取得联系。 为了更好地保障技术支持工作的质量,请您在回复邮件时选择“回复所有人”。 感谢您的理解与支持,祝您工作顺利! |