2010-02-14 45 views
7

mi aplicación ajax carga un archivo a un contenedor de aplicaciones Java desde el navegador del usuario. Lo que me gustaría hacer es esto: una vez que la carga se haya completado, quiero "enviar" el archivo a un servidor WebDAV, identificado por el nombre de host (es decir, localhost), el puerto (es decir, 8080) y la ubicación donde deseo para almacenar el archivo (es decir, dir1/dir2).Java: ¿Cómo subir un archivo a un servidor WebDAV desde un servlet?

Lo que busco es básicamente un framework de cliente WebDAV que me permita subir un archivo a WebDAV. En mi aplicación, ya estoy usando "webdavclient4j", pero parece que no encuentro la manera de subir un archivo con él.

¿Alguna idea? Gracias de antemano por cualquier ayuda que pueda brindar.

F

Respuesta

12

Puede hacerlo con sólo unas pocas líneas de código usando mi recientemente publicado y muy fácil de usar cliente moderno de webdav para Java, Sardine. Aquí está un par de ejemplos (primero utiliza commons-io para leer el archivo):

Sardine sardine = SardineFactory.begin("username", "password"); 
byte[] data = FileUtils.readFileToByteArray(new File("/file/on/disk")); 
sardine.put("http://yourdavserver.com/adirectory/nameOfFile.jpg", data); 

o utilizando corrientes:

Sardine sardine = SardineFactory.begin("username", "password"); 
InputStream fis = new FileInputStream(new File("/some/file/on/disk.txt")); 
sardine.put("http://yourdavserver.com/adirectory/nameOfFile.jpg", fis); 

https://github.com/lookfirst/sardine

aplausos,

Jon

+0

Hola Jon, gracias por su respuesta. Intenté Sardine y decidí usarlo en mis aplicaciones. Hace las cosas mucho más fáciles. F – francescoNemesi

+0

Yo también implementé Sardina. Increíblemente simple para crear un servicio web desde - ahora solo tengo que probarlo todo;) –

+0

@Jon: ¿Hay alguna forma de cargar un directorio directamente? Y si hay un directorio presente en el servidor web, ¿sobrescribiría los archivos? – rkg

6

Usted puede utilizar el Jackrabbit WebDAV Library.

Un ejemplo de un cliente WebDAV para cargar contenido en un servidor WebDAV (tomado de here):

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.net.URL; 
import org.apache.commons.httpclient.Credentials; 
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.HttpException; 
import org.apache.commons.httpclient.UsernamePasswordCredentials; 
import org.apache.commons.httpclient.auth.AuthScope; 
import org.apache.commons.httpclient.methods.InputStreamRequestEntity; 
import org.apache.commons.httpclient.methods.RequestEntity; 
import org.apache.jackrabbit.webdav.client.methods.PutMethod; 

... 

// WebDAV URL: 
final String baseUrl = ...; 
// Source file to upload: 
File f = ...; 
try{ 
    HttpClient client = new HttpClient(); 
    Credentials creds = new UsernamePasswordCredentials("username", "password"); 
    client.getState().setCredentials(AuthScope.ANY, creds); 

    PutMethod method = new PutMethod(baseUrl + "/" + f.getName()); 
    RequestEntity requestEntity = new InputStreamRequestEntity(
     new FileInputStream(f)); 
    method.setRequestEntity(requestEntity); 
    client.executeMethod(method); 
    System.out.println(method.getStatusCode() + " " + method.getStatusText()); 
} 
catch(HttpException ex){ 
    // Handle Exception 
} 
catch(IOException ex){ 
    // Handle Exception 
} 
+0

Intenté e intenté que el código funcionara y lo hayas publicado. Causó un final de dolor con Tomcat. Nuestro servidor WebDAV está basado en Jackrabbit, así que realmente quería que funcionara. –

+0

¡Gracias! Me ayudó con un servidor webdav de Oracle (a diferencia de Sardine). –

Cuestiones relacionadas