如何在闪亮的UI.R中将本地文件链接到html查询?

时间:2016-08-19 12:46:32

标签: html r shiny href

我有一个闪亮的应用程序,我希望有一个外部Web工具(GenomeCompiler)的链接来读取应用程序'〜/ www'文件夹中的文件。

GenomeCompiler的示例html代码使用Web存储库中的文件,并在应用程序中正常工作(请参阅下面的代码)。预期的行为是,在您运行代码之后(注意'source'不起作用,您需要运行它以使shinyApp()工作)它会在Web浏览器中打开一个选项卡(我正在使用Firefox)链接称为'质粒1'。当您单击它时,它会在浏览器中打开一个新选项卡,该选项卡会在GenomeCompiler网站中加载文件数据,并显示带注释和其他数据的周长。

##WORKING EXAMPLE
#Directory tree
#ui.R
#server.R
#www/OG34_OG34_pSF-OXB19.gb   # this is the file read by the tool, which can be downloaded and saved to the ~/www folder in the shiny app from the link:
#    <http://s3.amazonaws.com/gcc_production/plasmid_viewer/OG34_OG34_pSF-OXB19.gb>
library(shiny)
ui <- fluidPage(
# the GenomeCompiler supplied code is "https://designer.genomecompiler.com/plasmid_iframe?file_url=http://s3.amazonaws.com/gcc_production/plasmid_viewer/OG34_OG34_pSF-OXB19.gb"

  tags$a(href='https://designer.genomecompiler.com/plasmid_iframe?file_url=http://s3.amazonaws.com/gcc_production/plasmid_viewer/OG34_OG34_pSF-OXB19.gb', target='blank', 'plasmid1')
  )
server <- function(input, output){}

shinyApp(ui = ui, server = server)

我想用这种方法读取本地闪亮目录'〜/ www'中的文件,但找不到正确的语法。在上面的例子中使用了

tags$a(href='https://designer.genomecompiler.com/plasmid_iframe?file_url=OG34_OG34_pSF-OXB19.gb', target='blank', 'plasmid1')
  )

但是在基因组编译器web加载之后它会出现'错误加载文件(内部服务器错误)'。从我的无知,我明白该应用程序在本地工作,但这个外部工具从不同的地址工作,因此无法看到应用程序本地文件。我的猜测是我必须使用URL为工具提供本地文件的位置,但我不知道该怎么做。此外,我已经读过Firefox和其他浏览器由于安全性而不允许读取本地文件,因此我想以正确的方式编写此代码,以便我可以安全地在线部署应用程序。

我很感激帮助您使用适当的语法或方法来在工具中阅读应用本地文件。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容指向本地文件:

tags$a(href='data/plasmid1.txt', target='blank', 'plasmid1_localfile')

如果您要下载文件:

tags$a(href='data/plasmid1.txt', target='blank', 'plasmid1_localfile', download = 'plasmid1.txt')

注意: plasmid1.txt (文件)必须位于 www 文件夹中。

您可以尝试这个简单的例子:

目录树

ui.R
server.R
WWW /数据/ plasmid1.txt

(创建一个名为“plasmid1.txt”的空文本文件)

ui.R

library(shiny)

# Define UI for application that plots random distributions 
shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Hello Shiny!"),

  # Sidebar with a slider input for number of observations
  sidebarPanel(
    sliderInput("obs", 
                "Number of observations:", 
                min = 1,
                max = 1000, 
                value = 500), 

# Line spacing
hr(),

# Adding the 'a' tag to the sidebar linking external file
tags$p("'a' tag linking external file"),
tags$a(href='https://designer.genomecompiler.com/plasmid_iframe?file_url=http://s3.amazonaws.com/gcc_production/plasmid_viewer/OG34_OG34_pSF-OXB19.gb', target='blank', 'plasmid1_URLfile'),

# Line spacing
hr(), 

# Adding the 'a' tag to the sidebar linking local file
tags$p("'a' tag linking local file"),
tags$a(href='data/plasmid1.txt', target='blank', 'plasmid1_localfile', download = 'plasmid1.txt')
),

  # Show a plot of the generated distribution
  mainPanel(
    plotOutput("distPlot")
  )
))

server.R

library(shiny)

# Define server logic required to generate and plot a random distribution
shinyServer(function(input, output) {

  # Expression that generates a plot of the distribution. The expression
  # is wrapped in a call to renderPlot to indicate that:
  #
  #  1) It is "reactive" and therefore should be automatically 
  #     re-executed when inputs change
  #  2) Its output type is a plot 
  #
  output$distPlot <- renderPlot({

    # generate an rnorm distribution and plot it
    dist <- rnorm(input$obs)
    hist(dist)
  })
})

另见:how-do-i-add-a-link-to-open-a-pdf-file-in-a-new-window-from-my-r-shiny-app