如何在不只使用 rshiny 目录中的 www 文件夹的情况下从不同的文件夹加载不同的图像?

how to load the different image from different folder without only using www folder in the directory in the rshiny?

我正在使用 rshiny 构建渲染图像应用程序。我有 10 个不同的文件夹,每个文件夹中有 300 张图像。我不想将所有这 3000 张图像放入一个 www 文件夹中。有什么办法可以在服务器脚本中编写代码,以便我可以转到相关文件夹并找到我正在寻找的正确图像。

我搜了一下rshiny官网,上面写着:

img(src = "my_image.png", height = 72, width = 72)

img 函数在特定位置查找您的图像文件。您的文件必须位于与 app.R 脚本相同的目录中名为 www 的文件夹中。 Shiny 以一种特殊的方式对待这个目录。 Shiny 将与用户的 Web 浏览器共享放置在这里的任何文件,这使得 www 成为放置图像、样式表和浏览器构建 Shiny 应用程序的 wep 组件所需的其他内容的好地方。

我将使用 rshiny 网站的示例

library(shiny)
ui <- fluidPage(
  titlePanel("My Shiny App"),
  sidebarLayout(
    sidebarPanel(),
    mainPanel(
      img(src = "rstudio.png", height = 140, width = 400)
    )
  )
)

server <- function(input, output) {
  
}

shinyApp(ui = ui, server = server)

但是,www 文件夹中只有一张图片。我有 10 个不同的文件夹,每个文件夹中有 300 张图像。

希望能得到一些帮助。谢谢!

我们可以使用允许传递文件夹路径的renderImage()。这是一个例子:

library(shiny)


ui <- fluidPage(
    titlePanel("My Shiny App"),
    sidebarLayout(
        sidebarPanel(textInput('image_path', label = 'File Path:'),
        actionButton('send_path', 'Get Image')),
        mainPanel(
            imageOutput('my_image'),
            imageOutput('my_path_image')
        )
    )
)

server <- function(input, output) {
 
    output$my_image <- renderImage({
        list(src = '~/test.png') #use ~ to acces the home folder.
    }, deleteFile = FALSE)
    
    observeEvent(input$send_path, {
        
    output$my_path_image <- renderImage({
        list(src = input$image_path) 
    }, deleteFile = FALSE)
    
    })
       
}

shinyApp(ui = ui, server = server)