0

开始使用 Jackrabbit 2.6.3 和 commons httpclient 3。

我编写了一个简单的 webDav 客户端来将文件上传到服务器,并希望针对 jackrabbit 的独立服务器的默认存储库对其进行测试。只是我只想在默认存储库中放置一个文件。

我的 httpclient 连接并且该方法开始缓冲我的文件。麻烦的是,我似乎无法使用我应该将我的 http 方法指向的 URL 以正确地将其放入存储库中。独立服务器正在运行:

http://localhost:8080.

对于我尝试过的所有 url,我似乎要么得到 405 PUT 不支持,要么得到 404 或 403,或者更奇怪的“存储库 '/' 不以 '/default' 开头。如果我可以看到默认存储库内容将我的浏览器指向:

http://localhost:8080/repository/default/ 

简单地说,我的问题是,使用 PutMethod 执行此操作的 url 是什么?听起来很简陋。

我已经为我编写的类包含了一些截断的代码,特别是我目前正在使用的方法,我认为这足以证明我的方法是正确的。

public void insertFile(byte[] content, String id) throws Exception {
    PutMethod httpMethod = new PutMethod("http://localhost:8080/repository/default/");
    InputStream is = new ByteArrayInputStream(content);
    FileMetaData meta = new FileMetaData();
    meta.address = destUri;
    meta.id = id;
    meta.mimeType = Files.probeContentType(Paths.get(meta.address));
    RequestEntity requestEntity = new InputStreamRequestEntity(is, meta.mimeType);
    httpMethod.setRequestEntity(requestEntity);
    try {
        int statusCode = client.executeMethod(httpMethod);
        if (statusCode != HttpStatus.SC_OK) System.err.println("Method failed: " + httpMethod.getStatusLine());
        byte[] responseBody = httpMethod.getResponseBody();
        System.out.println(new String(responseBody));
    } catch (HttpException e) {
        System.err.println("Fatal protocol violation: " + e.getMessage());
        e.printStackTrace();
    } catch (IOException e) {
        System.err.println("Fatal transport error: " + e.getMessage());
        e.printStackTrace();
    } finally {
        httpMethod.releaseConnection();
    }

}

我敢肯定这是一个简单的答案,但是拖网文档似乎没有显示任何与此相关的资源或教程。任何帮助表示赞赏。

4

1 回答 1

0

真的很傻,完全认为 requestEntity 会在文件中发送一些数据并将其用作文件名,而不是我必须自己指定。提示:离开电脑 5 - 10 分钟。对于其他有我问题的人,它应该是“yourUrl/repository/default”+ fileName。简单的。

于 2013-10-24T14:33:51.767 回答