小智 0
这在 Ubuntu Shiny 服务器上对我有用。
#You need a folder with write permissions
ruta_conpermiso= "/srv/shiny-server/app"
substrRight <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))
}
ui <- fluidPage(
column(10,
fileInput(inputId = "shp", label = "Importar un Shape :", multiple = TRUE,
accept = c('.shp', '.dbf','.sbn', '.sbx', '.shx', '.prj')),
verbatimTextOutput("value"),
tableOutput("finalizado"),
)
)
server_v2 <- function(input, output, session) {
uploadShpfile <- reactive({
if (!is.null(input$shp)) {
shp <<- input$shp
for(i in (1:length(shp$datapath))){
print(i)
ruta_temp<<-shp$datapath[i]
sub<-str_split(as.character(ruta_temp), "/",n=3)
#ruta archivo
sub1<-str_split(as.character(ruta_temp), paste("/",as.character(i-
1),".",sep=""),n=3)
ruta_archivo<-sub1[[1]][1]
#nombre archivo
nombre_archivo<-sub[[1]][3]
#nuevo nombre archivo
nuevo_nombre<-gsub(as.character(i-1),"shapetemp",nombre_archivo)
#nuevo nombre
#nueva_dir<-paste(ruta_conpermiso,nuevo_nombre,sep="/")
nueva_dir<-paste(ruta_conpermiso)
#copio el archivo el directorio de trabajo
file.copy(ruta_temp, nueva_dir)
#Lo renombro
#nombre original
nombre_archivo<- substrRight(nombre_archivo, 5)
nombre_org<<-paste(ruta_conpermiso,nombre_archivo,sep="/")
#nombre final
nuevo_nombre<-substrRight(nuevo_nombre, 13)
nombre_final<<-paste(ruta_conpermiso,nuevo_nombre,sep="/")
file.copy(nombre_org, nombre_final)
}
#aca armo el shapefile
if(1 == 1){output$value <- renderText({paste(nombre_final)})
try(shapefile<<-
readOGR(paste(ruta_conpermiso,"shapetemp.shp",sep="/")),silent=T)
if (!exists("shapefile")){ output$value <-
renderText({"No se puede abrir el archivo"})}
if (exists("shapefile")) { output$finalizado <-
renderTable(shapefile@data)}
}
}
})
observeEvent(input$shp, {
uploadShpfile()
})
}
shinyApp(ui=ui, server=server_v2)
Run Code Online (Sandbox Code Playgroud)
我希望这很有用。此致。