首页 > 解决方案 > 有谁知道如何通过托管的 Shiny 应用程序与位于 Dropbox 上的 .xlsx 文件进行交互?

问题描述

我为我的工作制作了一个相对复杂的 Shiny 应用程序,在本地运行良好。但是,我正在尝试托管该应用程序,以便没有下载 R Studio 的用户可以访问它。我无法让应用程序通过 shinyapps.io 运行。这似乎主要与它无法找到位于 Dropbox 上的文件有关。该应用程序几乎完全基于在 Dropbox 上加载和写入文件。我尝试更改文件路径并使用 rdrop2 加载文件,但它会更改某些内容的格式,并且据我所知,协调起来会非常复杂。我是一个新手程序员,不得不重组整个应用程序的想法让我有点焦虑,而且肯定需要相当多的努力。有谁知道更“简单”的 通过 Shinyapps.io 上托管的闪亮应用程序修改位于 Dropbox 上的文件的方法,最好同时仍然能够使用“openxlsx”包?非常感谢您提前。

我认为可能有效的一种解决方法是使 Dropbox 文件的文件路径特定于用户,因为使用该应用程序的任何人都应该有权访问 Dropbox:

this.data <- as.data.frame(read.xlsx(paste("C:\Users\", Sys.info()[["user"]], "\Dropbox\rest of the file path", sep = "")))

标签: rshinydropboxopenxlsx

解决方案


免责声明:我不建议依靠谷歌未提交的 URL 来保证隐私。

修改从 DropBox 复制的共享链接替换dl=0dl=1以使下载开始而不是显示在 DropBox UI 中。

然后你可以在它之前download.file()进入一个:tempfile()read.xlsx()

library(shiny)
library(openxlsx)
library(DT)

ui <- fluidPage(
  titlePanel("XL Read from dropbox"),
  mainPanel( DTOutput("dt"))
)

server <- function(input, output) {
  tmpfile <- tempfile(fileext='.xlsx')
  download.file(url = "https://www.dropbox.com/s/1v0l...5u803a9hg/my_file.xlsx?dl=1", destfile = tmpfile , mode="wb")
  output$dt <- renderDT(read.xlsx(outfile))
}

shinyApp(ui = ui, server = server)

推荐阅读