首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >野兔WebDAV同步示例?

野兔WebDAV同步示例?
EN

Stack Overflow用户
提问于 2014-09-15 19:30:29
回答 1查看 3.5K关注 0票数 1

我使用Jackrabbit库来使用webdav协议与云存储进行通信。我需要一种方法来列出来自特定目录的所有文件,并获得最后一个修改的属性,但是我似乎找不到关于这方面的任何工作示例。

我基本上需要代码来将本地目录中的文件与webdav url同步。

代码语言:javascript
复制
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上载到备份文件夹的用法示例:

代码语言:javascript
复制
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

请帮帮我,我在这上面挣扎了很久了!

EN

回答 1

Stack Overflow用户

发布于 2015-03-24 15:17:16

看看欧盟门户网站上Krusche和合作伙伴的AMES WebDAV客户端代码。它是根据GPL授权的,所以它可能符合你的目的。

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

它对我有效,但是要访问,例如Win32LastModifiedTime,我需要获得自定义命名空间。

代码语言:javascript
复制
private static final Namespace WIN32_NAMESPACE = Namespace.getNamespace("Z2", "urn:schemas-microsoft-com:");

并从属性中检索自定义属性Win32LastModifiedTime。

代码语言:javascript
复制
                /* 
                 * Win32LastModifiedTime
                 */
                String win32lastmodifiedtime = null;

                DavProperty<?> Win32LastModifiedTime = properties.get("Win32LastModifiedTime", WIN32_NAMESPACE);            
                if ((Win32LastModifiedTime != null) && (Win32LastModifiedTime.getValue() != null)) win32lastmodifiedtime = Win32LastModifiedTime.getValue().toString();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25855535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档