让R Shiny app用户上传图片到Dropbox /闪亮服务器/ google驱动器

问题描述 投票:1回答:1

我几乎完成了使用Rshiny创建调查。我想创建一个按钮,允许用户将图像(jpeg,tiff,png等)上传到R闪亮服务器,Dropbox或谷歌硬盘。似乎fileInput方法只接受像csv这样的文件?任何帮助,将不胜感激!

r shiny shinyjs
1个回答
0
投票

fileInput实际上允许导入任何类型的文件。您只需将参数accept设置为NULL或您接受的任何文件扩展名。您首先需要了解的是,如果您使用fileInput,它实际上会将您的文件上传到tmp文件夹(上传数据的路径存储在input$file$datapath中),只有这样您才能将文件上传到googledrive或任何云。使用fileInput的解决方案可能如下所示:

library(googledrive)

ui <- fluidPage(
  fileInput(inputId = "file", 
            label = "Choose file to upload",
            accept = NULL)
)

server <- function(input, output) {

  observeEvent(input$file, {
    drive_upload(media = input$file$datapath,
                 name = input$file$name)
  })
}

shinyApp(ui, server)

如果“双重上传”对您来说是一个问题,您可以使用包shinyFiles来避免这种情况。一个很好的答案已发布here,这里是一种方法来调整代码来解决您的具体问题。

library(googledrive)
library(shinyFiles)

ui <- fluidPage(
  shinyFilesButton("Btn_GetFile", "Choose file to upload" ,
                   title = "Please select a file:", multiple = FALSE,
                   buttonType = "default", class = NULL)
)

server <- function(input, output, session) {

  volumes = getVolumes()
  observe({  
    shinyFileChoose(input, "Btn_GetFile", roots = volumes, session = session)
    if (!is.null(input$Btn_GetFile)){
      file_selected <- parseFilePaths(volumes, input$Btn_GetFile)
      drive_upload(media = as.character(file_selected$datapath), 
                   name = as.character(file_selected$name))
    }
  })
}

shinyApp(ui = ui, server = server)
© www.soinside.com 2019 - 2024. All rights reserved.