2010-02-14 98 views
7

我的ajax應用程序將文件從用戶的瀏覽器上傳到Java應用程序容器。我想要做的是這樣的:一旦上傳完成,我想將文件「發送」到由主機名(即localhost),端口(即8080)和我想要的位置標識的WebDAV服務器存儲文件(即dir1/dir2)。Java:如何從servlet上傳文件到WebDAV服務器?

我所追求的基本上是一個WebDAV客戶端框架,它使我能夠將文件上傳到WebDAV。在我的應用程序中,我已經使用「webdavclient4j」,但我似乎沒有找到上傳文件的方法?

任何想法?預先感謝您提供的任何幫助。

˚F

回答

12

您可以使用的代碼只有幾行做我最近公佈和超級好用現代webdav客戶端爲java,沙丁魚。下面是幾個例子(第一個使用公共-IO讀取文件):

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

或使用流:

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

歡呼聲,

喬恩

+0

嗨喬恩, 感謝您的迴應。我嘗試了沙丁魚,並決定在我的應用程序中使用它。使事情變得更容易。 F – francescoNemesi

+0

我也實施了沙丁魚。令人驚訝的是,簡單地創建一個web服務 - 現在我只需要全部測試;) –

+0

@Jon:有沒有辦法直接上傳目錄?如果網絡服務器上存在目錄,它是否會覆蓋文件? – rkg

6

可以使用Jackrabbit WebDAV Library

(從here拍攝)WebDAV用戶端將內容上傳到WebDAV服務器的一個例子:

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

我試過並試圖讓您發佈的代碼正常工作。它與Tomcat無法結束。我們的WebDAV服務器基於Jackrabbit,所以我非常希望這能夠起作用。 –

+0

謝謝!它幫助我使用Oracle webdav服務器(與沙丁魚不同)。 –

相關問題