【问题标题】:Downloading Files when R Shiny App is running on a Linux Server当 R Shiny App 在 Linux 服务器上运行时下载文件
【发布时间】:2020-07-01 19:38:17
【问题描述】:

我正在开发一个 Shiny 应用程序,它根据用户输入创建一个 URL,并使用 browseURL() 函数运行该 URL。该 URL 下载一个 csv 文件。该应用程序需要驻留在 Linux 服务器上,当我尝试从服务器运行它时,它一直给我一个错误。当我在我的机器上运行它时,它会打开 Google Chrome(这是我的默认网络浏览器)并将 csv 文件下载到默认的“下载”文件夹中(这是我期望的)。下面是我正在尝试做的简化版本。有人可以帮我弄清楚为什么它可以在我的机器上运行,但不能在 Linux 服务器上运行吗?我刚开始这个项目,我对 Linux 服务器一无所知。错误看起来像 -

/usr/bin/xdg-open: 778: /usr/bin/xdg-open: www-browser: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: links2: not found
/usr/bin/xdg-open: 778: /usr/bin/xdg-open: elinks: not found

非常感谢任何帮助。

library(shiny)
library(shinyWidgets)


ui <- fluidPage(
   
   # Application title
   titlePanel("Testing File Download on Linux Server"),
   
   
   sidebarLayout(
      sidebarPanel(
         textInput("SID","Specify SIDs", value = ""),
         actionBttn("goButton","Go!",color = "default",style = "unite",size = "lg")
      ),
      
      mainPanel()
      
           
   )
)


server <- function(input, output,session) {
 ts_info<-eventReactive(input$goButton,{
   TS_url<-paste("http://xyzserver&request=getList&station_no=",input$SID,"&format=csv&downloadfilename=testingdownload",sep="")

   return(TS_url)   
   

 })
 observe({
   browseURL(ts_info())
 }) 
   
}

# Run the application 
shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny shinyapps


    【解决方案1】:

    通过使用 browseURL,您要求在服务器上打开一个 Web 浏览器,这显然是无法做到的,因为它不是这样做的地方。浏览器必须在您的计算机上启动,而不是在服务器上启动。

    您可以将 url 格式化并提供为 uiOutput

    sidebarPanel(
             textInput("SID","Specify SIDs", value = ""),
             actionBttn("goButton","Go!",color = "default",style = "unite",size = "lg"),
             uiOutput("dlLink")
          ),
    
    output$dlLink <- renderUI(tags$a(href=tsInfo(),"Download"))
    

    【讨论】:

    • @ Billy34 - 谢谢。我明白你在说什么,但这是我试图这样做的简化版本。我只对下载的文件感兴趣,因为我稍后会在应用程序中阅读它并分析数据。我不想为用户提供下载文件的链接。有没有办法在用户不点击任何按钮的情况下只下载文件?此外,根据用户指定的 SID 数量,我有一个循环,即应用程序将为每个 SID 创建一个 URL 并下载一个数据文件。感谢您的帮助。
    • 我认为这是不可能的,否则任何页面都可以在未经您同意的情况下下载任何文件,让您的计算机打开病毒传播的路径。您可以将内容从服务器推送到显示的页面,但将它们写入磁盘将需要(如果可能)更多权限。恐怕这超出了我的专业范围:-)
    • 您可以使用浏览器的本地存储(它是一个像cookies和缓存一样管理的键值数据库)。 Dean Attali 写了一篇全面的介绍shiny.rstudio.com/articles/persistent-data-storage.html
    猜你喜欢
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多