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