如何验证用户在Shiny应用程序中上传的文件的文件类型?

时间:2015-03-22 23:31:34

标签: r shiny rstudio shiny-server

我正在尝试创建一个Shiny App(使用R Studio)。

我想使用fileInput小部件(名为ffile)从用户读取xlsx或xls文件。但是,我需要它来确保它是正确的文件类型,否则其余的代码将无法正常工作。我读到了validate()和need()函数。所以我这样做了:

data<-reactive({ 
infile = input$ffile 
if (is.null(infile)) 
return(NULL)
ext<-c('application/vnd.ms-excel','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

o<-is.element(infile$type,ext)
validate(need(o,'Wrong ext. Select .xls, .xlsx or .csv'))
file<-read.xlsx(infile$datapath, 1)
return(file) })

我尝试加载.docx文档并成功阻止,并根据需要显示警告消息。但是,当我尝试加载正确的.xlsx文件时,它仍会显示警告消息,而不是实际接受它。我不知道我是否错误地使用了验证/需要,或者有一些我不太了解的关于MIME的东西。帮助会被贬低。

1 个答案:

答案 0 :(得分:2)

您可以使用fileInput参数直接在ui.R的{​​{1}}对象中设置接受的MIME:

accept

这只会让用户从打开的文件浏览器窗口中选择excel文件。

fileInput('file1', 'Choose CSV File', accept=c('application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', '.xls', '.xlsx')) 中,您只需从文件中获取数据而无需验证。