2010-05-16 37 views
11

consigo la excepción: "URI régimen no es un archivo"esquema URI no es "archivo"

Lo que estoy haciendo es tratar de obtener el nombre de un archivo y luego guardar el archivo (desde otro servidor) sobre mi computadora/servidor desde dentro de un servlet.

tengo una cadena denominada "url", de la misma aquí está mi código:

url = Streams.asString(stream); //gets the URL from a form on a webpage 
System.out.println("This is the URL: "+url); 
URI fileUri = new URI(url); 

File fileFromUri = new File(fileUri);     

onlyFile = fileFromUri.getName(); 
URL fileUrl = new URL(url); 
InputStream imageStream = fileUrl.openStream(); 
String fileLoc2 = getServletContext().getRealPath("pics/"+onlyFile); 

File newFolder = new File(getServletContext().getRealPath("pics")); 
    if(!newFolder.exists()){ 
     newFolder.mkdir(); 
    } 
    IOUtils.copy(imageStream, new FileOutputStream("pics/"+onlyFile)); 
} 

La línea que causa el error es éste:

File fileFromUri = new File(fileUri);     

he añadido el resto de la código para que pueda ver lo que estoy tratando de hacer.

Respuesta

25

El "esquema" de URI es lo que viene antes del ":", por ejemplo "http" en "http://stackoverflow.com".

El mensaje de error indica que new File(fileUri) funciona solo en "archivo:" URI (los que se refieren a una ruta en el sistema actual), no en otros esquemas como "http".

Básicamente, el URI "file:" es otra forma de especificar una ruta a la clase File. No es una forma mágica de decirle al File que use http para buscar un archivo desde la web.

3

Su suposición de crear File desde URL está mal aquí.

Simplemente no necesita crear un File desde la URL al archivo en Internet, para que obtenga el nombre del archivo.

Simplemente puede hacer esto con el análisis de la URL así:

URL fileUri = new URL("http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/ladybug/fish4.jpg");  
int startIndex = fileUri.toString().lastIndexOf('/'); 
String fileName = fileUri.toString().substring(startIndex + 1); 
System.out.println(fileName); 
+0

Gracias Esto también es muy útil. – Ankur

Cuestiones relacionadas