2010-02-14 5 views
7

mon application ajax télécharge un fichier dans un conteneur d'application Java à partir du navigateur de l'utilisateur. Ce que je voudrais faire est ceci: une fois le chargement terminé je veux "envoyer" le fichier à un serveur WebDAV, identifié par le nom d'hôte (ie localhost), le port (ie 8080) et l'endroit où je veux pour stocker le fichier (c'est-à-dire dir1/dir2). Ce que je suis après est essentiellement un framework client WebDAV qui me permet de télécharger un fichier sur WebDAV. Dans mon application, j'utilise déjà "webdavclient4j", mais je ne trouve pas de moyen de télécharger un fichier avec celui-ci?Java: Comment télécharger un fichier sur un serveur WebDAV à partir d'une servlet?

Des idées? Merci d'avance pour toute aide que vous pourriez fournir.

F

Répondre

12

Vous pouvez le faire avec seulement quelques lignes de code en utilisant mon récemment publié et super facile à utiliser client webdav moderne pour Java, Sardine. Voici un exemple de couple (premier utilise commons-io pour lire le fichier):

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

ou à l'aide de flux:

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

acclamations,

jon

+0

Salut Jon, merci pour votre réponse. J'ai essayé Sardine et j'ai décidé de l'utiliser dans mes applications. Rend les choses beaucoup plus faciles. F – francescoNemesi

+0

J'ai aussi mis en œuvre la sardine. Incroyablement simple de créer un service web - maintenant je dois tout faire tester;) –

+0

@Jon: Y at-il un moyen de télécharger directement un répertoire? Et s'il y a un répertoire présent sur le serveur web, est-ce qu'il écraserait simplement les fichiers? – rkg

6

Vous pouvez utiliser la Jackrabbit WebDAV Library.

Un exemple d'un client WebDAV pour télécharger le contenu sur un serveur WebDAV (extrait 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

J'ai essayé et j'ai essayé de faire fonctionner le code que vous avez posté. Cela n'a pas causé de fin de chagrin avec Tomcat. Notre serveur WebDAV est basé sur Jackrabbit, donc je voulais vraiment que ça fonctionne. –

+0

Merci! Cela m'a aidé avec un serveur webdav Oracle (contrairement à Sardine). –

Questions connexes