2010-02-14 12 views
7

la mia applicazione ajax carica un file in un contenitore di applicazioni Java dal browser dell'utente. Quello che mi piacerebbe fare è questo: una volta completato il caricamento, voglio "inviare" il file a un server WebDAV, identificato dal nome host (cioè localhost), dalla porta (cioè 8080) e dalla posizione in cui voglio per memorizzare il file (es. dir1/dir2).Java: come caricare un file su un server WebDAV da un servlet?

Quello che sto cercando è fondamentalmente un framework client WebDAV che mi consente di caricare un file su WebDAV. Nella mia applicazione sto già usando "webdavclient4j", ma non riesco a trovare un modo per caricare un file con esso?

Qualche idea? Grazie in anticipo per qualsiasi aiuto tu possa fornire.

F

risposta

12

Puoi farlo con poche righe di codice usando il mio recente pubblicazione e super facile da usare client webdav moderno per java, Sardine. Ecco un paio di esempi (primo usa commons-io di leggere il file):

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 utilizzando i flussi:

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

applausi,

jon

+0

Ciao Jon, grazie per la vostra risposta. Ho provato Sardine e ho deciso di usarlo nelle mie applicazioni. Rende le cose molto più facili. F – francescoNemesi

+0

Anche io ho implementato la sardina. Incredibilmente semplice creare un servizio web da - ora devo solo testarlo tutto;) –

+0

@Jon: C'è un modo per caricare direttamente una directory? E se sul server Web è presente una directory, si limiterebbe a sovrascrivere i file? – rkg

6

È possibile utilizzare la Jackrabbit WebDAV Library.

Un esempio di un client WebDAV per caricare contenuti su un server WebDAV (tratto da 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

Ho provato e provato a ottenere il funzionamento del codice che hai pubblicato. Non ha causato la fine del dolore con Tomcat. Il nostro server WebDAV è basato su Jackrabbit, quindi volevo davvero che funzionasse. –

+0

Grazie! Mi ha aiutato con un server webdav Oracle (a differenza di Sardine). –

Problemi correlati