2010-02-14 76 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服务器(与沙丁鱼不同)。 –

相关问题