使用文件预览
在 iFrame 中嵌入文件预览
无需使用特殊应用程序即可在浏览器中预览 各种 文件。 在支持的文件中,你可以查看 PDF、JPG、MP4 等。
若要在 中 iframe
预览文件,需要
- 调用 Graph 的 driveItem 预览版终结点并获取 GetUrl
- 在 iFrame (中使用 URL,甚至在新页面中打开它)
使用 Graph 获取预览 URL
Microsoft Graph 提供以下终结点来 预览文件:
POST https://graph.microsoft.com/{version}/drives/{driveId}/items/{itemId}/preview
Version
是 Graph 的版本。 例如“v1.0”- 是
driveId
容器 ID (以“b!”开头) - ,
itemId
它是驱动器项 ID。
如果使用的是 Microsoft Graph C# SDK,则代码将类似于以下内容:
ItemPreviewInfo preview = await graphServiceClient.Drives[driveId].Items[itemId]
.Preview()
.Request()
.PostAsync();
JSON 响应包括每个文档的预览 URL。 使用 在 中获取的 getUrl
:
{
"getUrl": "https://www.onedrive.com/embed?foo=bar&bar=baz",
"postParameters": "param1=value¶m2=another%20value",
"postUrl": "https://www.onedrive.com/embed_by_post"
}
提示
通过将 参数 nb=true
添加到获取的 URL,可以删除顶部的横幅。 例如 https://contoso.sharepoint.com/restOfUrl/embed.aspx?param1=value&nb=true
警告
目前 getUrl 包含一个参数,其中包含只能与应用程序一起使用的加密令牌。 但是,这种情况可能会在不久的将来更改,并且可能会要求你添加身份验证标头,就像处理其他请求一样。
在 中使用 URL iframe
下一步只是在新页面中使用上一步中获取的 URL。 应用程序中可能有一个终结点,该终结点提供与以下类似的新页面:
<!DOCTYPE html>
<html>
<body>
<h2>Preview</h2>
<p>Preview of {file name}:</p>
<iframe src="{preview URL}" height="200" width="300" id="preview" title="Iframe Example"></iframe>
</body>
</html>
动态加载文档预览
如果打算在同一页中动态加载预览而不离开预览,如果尝试直接从页面的脚本访问 Microsoft Graph 终结点,则可能会收到 CORS 错误。
解决此问题的一种方法是在应用程序中创建一个终结点,用于发出请求并返回 URL。
例如,服务器端代码应首先获取文档的预览 URL:
[HttpGet]
[AuthorizeForScopes(Scopes = new string[] { "Files.Read.All" })]
public async Task<ActionResult<string>> GetPreviewUrl(string driveId, string itemId)
{
// Obtain tokens for the the request
// Use the function created in the first step
return url + "&nb=true"; //Use nb=true to suppress banner
}
然后,客户端应用程序可以使用浏览器的 fetch
API 请求 URL 并将其注入到 中 iframe
:
async function preview(driveId, itemId) {
const url = `/GetPreviewUrl?driveId=${driveId}&itemId=${itemId}`;
const response = await fetch(url, {
credentials: 'include',
}).then(response => response.text());
document.getElementById('preview').src = response + "&nb=true"; //Use nb=true to suppress banner
}