Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
Ayuda -> Problemas con path en el Apache Commons Fileupload y Tomcat...
Enviado por jordi el día 13 de abril de 2005
Muy buenas a tod@s,
He utilizado la opción de upload de ficheros con jsp de http://jakarta.apache.org/commons/fileupload/, y todo funciona perfectamente, hasta que decido cambiar la localización del fichero en el servidor. Mi problema es que desarrollo mi proyecto de final de carrera sobre windows pero el servidor es un linux, y en el momento de decidir dónde subir el fichero... pues no me funciona. ¿Alguien podria decirme cómo indicarle a un jsp un path relativo para subir ficheros? El destino de las fotos que he de subir iria en %CATALINA_HOME%/webapps/aulavirtual/fotos, pero no se cómo indicar este path relativo a la base de la aplicación web "genéricamente", es decir, con $ en Linux o con % en Windows. De echo, ni siquiera me reconoce ninguna variable, y en el momento de escritura del fichero, he de indicarle toda la ruta entera, del estilo:
String fileName = nombre_fichero_subido;
File fichero = new File(fileName);
fichero = new File("C:\\Archivos de Programa\\Tomcat 5.0\\webapps\\aulavirtual\\fotos\\" + fichero.getName());
Y claro, esto me sirve para Windows, pero no para Linux, y la idea es no necesitar cambiar cada vez ese path, y mucho menos si la aplicación o el servidor cambian de localización... ¿Sería posible que Tomcat reconociese dinámicamente de alguna manera la dirección raíz de la aplicación que está ejecutando tal y como sucede para leer páginas html? Me refiero al ya mencionado %CATALINA_HOME%/webapps/aulavirtual/fotos...
Re: Ayuda -> Problemas con path en el Apache Commons Fileupload y Tomcat...
Enviado por malone el día 14 de abril de 2005
Realise yo algunas pruebas, y en WIN el path lo cambie
de c:\tmp\fotos por /tmp/fotos y funciono correctamente en WIN.
Lo cambie ha un servidor linux y lo unico que tuve que hacer es crear la ruta /tmp/fotos con los permisos correspondientes de escritura lectura.
Aprovechando, una pregunta
Utilizando fileipload puedo accesar a parametros de la pagina al igual que los archivos.?
Esto es realizo un formulario com varuios campos y un campo de archivo, lo mando a un servlet que es el que subira el archivo, puedo accesar los parametros y el archivo utilizando http://jakarta.apache.org/commons/fileupload/,
Porque yo lo realizo con unos jar de orrealy.?
GRACIAS
Re: Re: Ayuda -> Problemas con path en el Apache Commons Fileupload y Tomcat...
Enviado por Jordi el día 17 de abril de 2005
Muchísimas gracias Ken, he utilizado las Propierties del Java i en efecto he podido conseguir el hom del Catalina. Lo he aplicado y funciona a las mil maravillas, gracias d everdad!
Para malone: yo solo uso las jsp para hacer el upload y no he podido pasar parámetros con el formulario, ya que detecta que le suben un fichero y sólo reconoce el tipo de ichro. Yo lo que hago es pasarle por parámetro url la información que necesitas. Es un poco cutre, pero gracias al pOST no se ve y no se nota (yo sólo paso un campo string).
Re: Re: Re: Ayuda -> Problemas con path en el Apache Commons Fileupload y Tomcat...
Enviado por dariosilvestre el día 18 de abril de 2005
Otra manera de consegir el path completo de una aplicación web es usar el método getRealPath de la clase ServletContext del paquete javax.servlet.
String pathCompleto = javax.servlet.ServletContext.getRealPath("/nombreContexto/directorio/");
Además, si te acostumbras a usar File.separator en lugar de "\" o "/" el sistema se encargará de utilizar el separador de directorio adecuado según esté corriendo la aplicación en Win o Unix.
por favor si me pudieras ayudar necesita ver la forma como subir un archivo al servidor solo utilizando jsp no servlets por que no se por que no se compilan los servlets o si me explicas lo del upload de apache ya lo tengo bajado pero no me funciona ayuda por favor es urgente
Re: Re: Re: Re: ayuda por favor como subo un archivo al servidor
Enviado por wincero el día 8 de agosto de 2008
Estoy intentando subir archivoa a mi servidor y no lo he conseguido...me gustaria si alguno de ustedes tiene un ejemplo en donde suba archivos a un servidor remoto....gracias de antemano
Re: Re: Re: Re: Re: ayuda por favor como subo un archivo al servidor
Enviado por dmickey el día 25 de agosto de 2008
PrintWriter out = response.getWriter();
// 1. obtengo el directorio donde guardare los archivos, desde un
// parametro de
// contexto en el archivo web.xml
dirUploadFiles = getServletContext().getRealPath(
getServletContext().getInitParameter("dirUploadFiles"));
System.out.println("1. " + dirUploadFiles);
// 2. Si la peticion es de tipo multi-part,
// static boolean isMultipartContent() devuelve true/false
if (ServletFileUpload.isMultipartContent(request)) {
// 3. crear el arhivo factory
// DiskFileItemfactory es una implementacion de FileItemfactory
// esta implementacion crea una instacia de FileItem que guarda su
// contenido ya sea en la memoria, para elementos peque�os,
// o en un archivo temporal en el disco, para los
// elementos de mayor tama�o
FileItemFactory factory = new DiskFileItemFactory();
System.out.println("1.1 "+factory);
// 4. crear el servlet upload
// es un API de alto nivel para procesar subida de archivos
// Por defecto la instancia de ServletFileUpload tiene los
// siguientes valores:
// * Size threshold = 10,240 bytes. Si el tama�o del archivo est�
// por debajo del umbral,
// se almacenar� en memoria. En otro caso se almacenara en un
// archivo temporal en disco.
// * Tama�o Maximo del cuerpo de la request HTTP = -1.
// El servidor aceptar� cuerpos de request de cualquier tama�o.
// * Repository = Directorio que el sistema usa para archivos
// temporales.
// Se puede recuperar llamando a
// System.getProperty("java.io.tmpdir").
ServletFileUpload upload = new ServletFileUpload(factory);
System.out.println("1.2 "+upload);
/*
* 5. declaro listUploadFiles Contendr� una lista de items de
* archivo que son instancias de FileItem Un item de archivo puede
* contener un archivo para upload o un campo del formulario con la
* estructura simple nombre-valor (ejemplo: <input name="text_field"
* type="text" />)
*
* Podemos cambiar las opciones mediante setSizeThreshold() y
* setRespository() de la clase DiskFileItemFactory y el m�todo
* setSizeMax() de la clase ServletFileUpload, por ejemplo:
*
* DiskFileItemFactory diskFileItemFactory = new
* DiskFileItemFactory();
* diskFileItemFactory.setSizeThreshold(40960); // bytes
*
* File repositoryPath = new File("/temp");
* diskFileItemFactory.setRepository(repositoryPath);
*
* ServletFileUpload servletFileUpload = new
* ServletFileUpload(diskFileItemFactory);
* servletFileUpload.setSizeMax(81920); // bytes
*/
// limito a 300 Kb el humbral del tama�o del archivo a subir
// Long.parseLong( getServletContext().getInitParameter(
// "maxFileSize" ) )
upload.setSizeMax(new Long(getServletContext().getInitParameter(
"maxFileSize")).longValue()); // 1024 x 300 = 307200 bytes =
// 300 Kb
List listUploadFiles = null;
FileItem item = null;
try {
// 6. adquiere la lista de FileItem asociados a la peticion
listUploadFiles = upload.parseRequest(request);
System.out.println(request);
System.out.println("2. " + listUploadFiles);
/*
* 7. Iterar para obtener todos los FileItem vamos a trabajar
* con generalidad programaremos como si quisieramos leer todos
* los campos sean 'simples' o 'file'. Por ello iteramos sobre
* todos los FileItem que recibimos: Los par�metros simples los
* diferenciaremos de los par�metros 'file' por medio del m�todo
* isFormField()
*/
Iterator it = listUploadFiles.iterator();
while (it.hasNext()) {
item = (FileItem) it.next();
System.out.println("3. " + item);
// 8. evaluamos si el campo es de tipo file, para subir al
// servidor
if (!item.isFormField()) {
// 9. verificamos si el archivo es > 0
if (item.getSize() > 0) {
// 10. obtener el nombre del archivo
String nombre = item.getName();
System.out.println("4. " + nombre);
// 11. obtener el tipo de archivo e. .jpg =
// "image/jpeg", .txt = "text/plain"
String tipo = item.getContentType();
System.out.println("5. " + tipo);
// 12. obtener el tama�o del archivo
long tamanio = item.getSize();
System.out.println("6. " + tamanio);
// 13. obtener la extension
String extension = nombre.substring(nombre
.lastIndexOf("."));
System.out.println("7. " + extension);
out.println("Nombre: " + nombre + "<br>");
out.println("Tipo: " + tipo + "<br>");
out.println("Extension: " + extension + "<br>");
// 14. determinar si el caracter slash es de linux,
// o windows
String slashType = (nombre.lastIndexOf("\\") > 0) ? "\\"
: "/"; // Windows o Linux
System.out.println("8. " + slashType);
// 15. obtener la ultima posicion del slash en el
// nombre del archivo
int startIndex = nombre.lastIndexOf(slashType);
System.out.println("9. " + startIndex);
// 16. obtener el nombre del archivo ignorando la
// ruta completa
String myArchivo = nombre.substring(startIndex + 1,
nombre.length());
System.out.println("10. " + myArchivo);
// 17. Guardo archivo del cliente en servidor, con
// un nombre 'fijo' y la
// extensi�n que me manda el cliente,
// Create new File object
File archivo = new File(dirUploadFiles, myArchivo);
System.out.println("11. " + archivo);
// 18. Write the uploaded file to the system
item.write(archivo);
if (archivo.exists()) {
out.println("GUARDADO "
+ archivo.getAbsolutePath() + "</p>");
} else {
// nunca se llega a ejecutar
out.println("FALLO AL GUARDAR. NO EXISTE "
+ archivo.getAbsolutePath() + "</p>");
}
}
}
}
} catch (FileUploadException e) {
System.out
.println("SALTA A ESTE CATCH SI LA PETICION CUANDO SE PARSEA CONTIENE UN FICHERO SUPERIOR");
// SALTA A ESTE CATCH SI LA PETICION CUANDO SE PARSEA CONTIENE
// UN FICHERO
// SUPERIOR A 300 KB, LA EXCEPCION ES LANZADA DESDE
// upload.parseRequest( request )
// y port lo tanto la instruccion else nunca se ejecuta:
// if( archivo.exists() ){
// ...
// }else{
// ...
// }
// mejorar este algoritmo para que procese la soliitud
// respondiendo,
// true/false si se ha tenido exito en subir el archivo
e.printStackTrace();
} catch (Exception e) {
System.out
.println("poner respuesta = false; si existe alguna problema");
// poner respuesta = false; si existe alguna problema
e.printStackTrace();
}
}
out.println("Fin de la operacion! ;)");
out.close();