我想创建一个zip归档文件(包含几个xlsx文件)并将其保存在本地。这些文件存储在服务器端的文件夹中。 用户使用checkboxInput选择要压缩的文件。
以下是复选框的代码:
get.files <- reactive({
list.files("output_file/")
})
obsList <- list()
output$links_list <- renderUI({
lapply(as.list(1:length(get.files())), function(i)
{
btName <- get.files()[i]
# creates an observer only if it doesn't already exists
if (is.null(obsList[[btName]])) {
obsList[[btName]] <<- btName
}
fluidRow(checkboxInput(btName, get.files()[i]) )
})
})
创建复选框后会自动读取文件夹(“ output_file /”)中的内容。每个复选框旁边都有文件名。
下载功能为:
output$downloadzip<-downloadHandler(
filename = function(){
paste0("Extract.zip")
},
content = function(file){
files <- NULL;
for (i in 1:length(obsList)){
if(input[[obsList[[i]]]])
files <- c(paste("output_file/",obsList[[i]],sep=""),files)
}
#create the zip file
zip(file,files)
},
contentType = "application/zip"
)
该函数仅使用已检查文件的名称创建文件名(文件)数组。
我还创建了一个函数,该函数使我可以检查是否仅选择了正确的文件:
tempText <- eventReactive({input$TempTest},{
l<-c()
for (i in 1:length(obsList)){
if(input[[obsList[[i]]]])
l<-c(l,paste("output_file/",obsList[[i]],sep=""))
}
return(paste(l) )
},
ignoreInit = TRUE)
output$Temp <- renderPrint({ tempText()})
此函数正确显示带有文件名的字符串。
我尝试下载zip文件时遇到的错误是:
sh::找不到命令
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
我已解决问题。 zip函数的问题是由于某些原因在我的服务器上无法正常工作。 解决方案是直接使用system2函数(在内部由zip调用)。
代替
zip(file,files)
我必须使用:
system2("zip", args=(paste(file,files,sep=" ")))