mi código es para coger un fichero del cliente y guardarlo en mi servidor, pero supongo que podrías ampliarlo de alguna otra manera...
adelanto, que no es un código muy limpio y quizas te lies entre los path.. la cosa es coger una imagen y guardarla en la carpeta /img/avatar/nombre_Imagen
quizas si pusieras una ruta completa de la otra máquina y cambiando alguna cosilla de conseguir el AbsolutePath y eso... aunque dudo que el firewall te deje hacer eso..
suerte!
Código:
//llamada al método
String upload = subirImagen(request,out,"imagen.jpg");
public String subirImagen(HttpServletRequest request, PrintWriter out, String nombre_Imagen) {
// 1. obtengo el directorio donde guardare los archivos, desde un parametro de
// contexto en el archivo web.xml
try {
String dirUploadFiles = getServletContext().getRealPath("img/avatar/");
System.out.println(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();
// 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);
/* 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
upload.setFileSizeMax(Long.parseLong("300000"));
List listUploadFiles = null;
FileItem item = null;
try {
// 6. adquiere la lista de FileItem asociados a la peticion
listUploadFiles = upload.parseRequest(request);
/* 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();
// 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();
// 11. obtener el tipo de archivo
// e. .jpg = "image/jpeg", .txt = "text/plain"
String tipo = item.getContentType();
// 12. obtener el tamaño del archivo
long tamaño = item.getSize();
// 13. obtener la extension
String extension = nombre.substring(nombre.lastIndexOf("."));
System.out.println("Nombre: " + nombre + "<br>");
System.out.println("Tipo: " + tipo + "<br>");
System.out.println("Extension: " + extension + "<br>");
// 14. determinar si el caracter slash es de linux, o windows
//String slashType = ( nombre.lastIndexOf( "\\" ) > 0 ) ? "\\" : "/"; // Windows o Linux
// 15. obtener la ultima posicion del slash en el nombre del archivo
//int startIndex = nombre.lastIndexOf( slashType );
// 16. obtener el nombre del archivo ignorando la ruta completa
//String myArchivo = nombre.substring( startIndex + 1, nombre.length() );
// 17. Guardo archivo del cliente en servidor, con un nombre 'fijo' y la
// extensión que me manda el cliente,
// Create new File object
nombre=nombre_Imagen;
File archivo = new File(dirUploadFiles, nombre);
System.out.println(archivo.getAbsolutePath());
System.out.println(archivo.getPath());
// 18. Write the uploaded file to the system
item.write(archivo);
if (archivo.exists()) {
System.out.println("GUARDADO " + archivo.getAbsolutePath() + "</p>");
} else {
// nunca se llega a ejecutar
System.out.println("FALLO AL GUARDAR. NO EXISTE " + archivo.getAbsolutePath() + "</p>");
}
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return "/img/avatar/"+nombre_Imagen;
}