首页 > 解决方案 > 在上传到 shinyapps.io 的 Shiny 应用中打开 .rda 文件

问题描述

我正在努力实现以下目标:

  1. 将 Shiny 应用程序部署到 shinyapps.io
  2. 打开时,应用程序连接到 Sharepoint
  3. 下载并打开存储在那里的 .rda 文件。该文件包含专有数据,只有拥有相关凭据的人才能访问这些数据。

这使我可以将对应用程序的访问与对数据的访问分开(只有当您拥有相关凭据时,您才能获取数据文件 - .rda)。这也意味着向 shinyapps.io 服务器上传更精简的信息集。

这一切在 R-studio 中运行良好,因为下载操作将 .rda 粘贴到本地文件夹中,而加载操作将在那里序列化的对象带入环境。

一旦将应用程序部署到shinyapps.io,它就会失败(可以预见):我怀疑“下载”停止了任何意义。理想情况下,应该有一个“打开”操作打开 .rda,然后将相关对象带入环境。我真的找不到。

这是在 R-Studio 中工作的代码(我显然无法分享 Sharepoint 网站的确切细节),任何帮助找出正确的工作流程策略以便它可以在 shinyapps.io 上工作将非常感激。

library(Microsoft365R)

site <- get_sharepoint_site(site_id = "idOfTheSharepointSite")
docs <- site$get_drive()

docs$download_file("Stuff/DelSet.Rda", overwrite = T)

load("DelSet.Rda")

编辑

实际问题不是文件本身的管理(下面的评论应该解决这个问题)。这是 Shinyapps.io 中 Sharepoint 上的认证。这个准系统应用程序也失败了(在 R-studio 上按预期工作)。

library(shiny)
library(Microsoft365R)

site <- get_sharepoint_site(site_id = "IDofMySite")
docs <- site$get_drive()

ui <- fluidPage(h5("Hello world!"))

server <- function(input, output) {}
shinyApp(ui = ui, server = server)

标签: rsharepointshinymicrosoft365r

解决方案


通常,当您调用 Microsoft365R 之类的函数时get_sharepoint_site(),它们会使用内置应用程序注册 ID 进行身份验证,该 ID 假定代码在您的本地计算机上运行。当您的代码位于远程服务器上时,这将不起作用,例如 shinyapps.io。相反,您必须在 Azure 中注册您的应用程序,并在进行身份验证时使用生成的应用程序 ID。

该过程基本上是:

  • 创建一个应用程序注册,其中包含有关您的站点的信息,包括重定向 URI(您的站点地址),以及允许使用它的人(您组织中的每个人或唯一的人)。您可以在 Azure 门户中或使用 CLI 执行此操作。
  • 为应用注册授予使用 MS365 的必要权限。它们都是 Microsoft Graph 权限,并且范围具有基本 URI https://graph.microsoft.com/*
  • 在您的 Shiny UI 脚本中,使用所需的范围、您的租户和您的应用 ID 调用 build_authorization_uri
  • 在服务器脚本中,调用 get_azure_token 并将 authcode 传递给它,如 AzureAuth Shiny 小插图中所示
  • 在对 的调用中使用令牌get_sharepoint_site

描述该过程并提供简单的 Shiny 应用程序框架的小插图草稿在这里:https ://github.com/Azure/Microsoft365R/blob/master/vignettes/shiny.Rmd


推荐阅读