2014-09-15 2 views
1

Я использую библиотеку Jackrabbit для связи с облачным хранилищем с использованием протокола webdav. Мне нужен способ перечислить все файлы из определенного каталога и получить последнее измененное свойство, но я не могу найти никаких рабочих примеров.Примеры синхронизации Labrabbit WebDAV?

Мне в основном нужен код для синхронизации файлов из локального каталога с URL-адресом webdav.

import java.io.File; 
import java.io.FileInputStream; 

import org.apache.commons.httpclient.Credentials; 
import org.apache.commons.httpclient.HttpClient; 
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.DavMethod; 
import org.apache.jackrabbit.webdav.client.methods.MkColMethod; 
import org.apache.jackrabbit.webdav.client.methods.PutMethod; 

public class WebDavClient 
{ 
    private String resourceUrl; 
    private HttpClient client; 
    private Credentials credentials; 
    private DavMethod method; 

    public WebDavClient(String resourceUrl, String username, String password) 
      throws Exception 
    { 
     this.resourceUrl = resourceUrl; 
     client = new HttpClient(); 
     credentials = new UsernamePasswordCredentials(username, password); 
     client.getState().setCredentials(AuthScope.ANY, credentials); 
    } 

    public int upload(String fileToUpload) throws Exception 
    { 
     method = new PutMethod(getUpdatedWebDavPath(fileToUpload)); 

     RequestEntity requestEntity = new InputStreamRequestEntity(
       new FileInputStream(fileToUpload)); 
     ((PutMethod) method).setRequestEntity(requestEntity); 

     client.executeMethod(method); 

     return method.getStatusCode(); 
    } 

    public int createFolder(String folder) throws Exception 
    { 
     method = new MkColMethod(getUpdatedWebDavPath(folder)); 

     client.executeMethod(method); 

     return method.getStatusCode(); 
    } 

    private String getUpdatedWebDavPath(String file) 
    { 
     // Make sure file names do not contain spaces 
     return resourceUrl + "/" + new File(file).getName().replace(" ", ""); 
    } 
} 

Пример использования для загрузки файла Test.txt в резервного папки:

String myAccountName = "..."; 
String myPassword = "..."; 
WebDavClient webdavUploader = new WebDavClient("https:\\\\webdav.hidrive.strato.com\\users\\" + myAccountName + "\\Backup", myAccountName, myPassword); 

webdavUploader.upload("C:\\Users\\Username\\Desktop\\Test.txt"); 

Вот список различных DavMethods, которые могут быть полезны: http://jackrabbit.apache.org/api/1.6/org/apache/jackrabbit/webdav/client/methods/package-summary.html

Пожалуйста помогите, я так долго боролся с этим!

ответ

2

Ознакомьтесь с кодом клиента AMES WebDAV от Krusche и Partner на портале ЕС. Он лицензируется под лицензией GPL, поэтому он может соответствовать вашей цели.

https://joinup.ec.europa.eu/svn/ames-web-service/trunk/AMES-WebDAV/ames-webdav/src/de/kp/ames/webdav/WebDAVClient.java

Это работает для меня, хотя доступ, например, Win32LastModifiedTime Мне нужно получить собственное пространство имен, например.

private static final Namespace WIN32_NAMESPACE = Namespace.getNamespace("Z2", "urn:schemas-microsoft-com:"); 

и получить пользовательские свойства Win32LastModifiedTime из свойств.

   /* 
       * Win32LastModifiedTime 
       */ 
       String win32lastmodifiedtime = null; 

       DavProperty<?> Win32LastModifiedTime = properties.get("Win32LastModifiedTime", WIN32_NAMESPACE);    
       if ((Win32LastModifiedTime != null) && (Win32LastModifiedTime.getValue() != null)) win32lastmodifiedtime = Win32LastModifiedTime.getValue().toString(); 
Смежные вопросы