【问题标题】:How to update server resource using WebDAV如何使用 WebDAV 更新服务器资源
【发布时间】:2015-07-03 10:26:36
【问题描述】:

我正在编写一个使用 Jackrabbit WebDAV 库的 Android 应用程序。

借助这个 WebDAV 库,我可以从服务器下载和上传文件。这按预期工作。

现在我想从文件中获取一个与服务器具有特定偏移量的字节数组。为此,我尝试过的是:

byte buffer[] = null;
Log.d(TAG, "downloadBytes '" + fileUri + "'  byteOffset '" + byteOffset + "'  byteOffset '" + byteCount);
HttpClient httpClient = new HttpClient();

GetMethod httpMethod = new GetMethod(fileUri);

httpMethod.addRequestHeader("Accept-Ranges", "bytes");
int total = byteOffset + byteCount;
String bytesMessage = "bytes=" + byteOffset + "-" + total;
Log.d(TAG, "bytesMessage " + bytesMessage);

httpMethod.addRequestHeader("Range", bytesMessage);
httpMethod.addRequestHeader("Cache-Control", "no-cache, no-store");

httpClient.executeMethod(httpMethod);

这按预期工作。

同样,我想通过指定偏移量来使用字节数组更新服务器上的文件,但这似乎不起作用;服务器返回 400 Bad Request 错误代码。

byte buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x50};
Log.d(TAG, "downloadBytes '" + fileUri + "'  byteOffset '" + byteOffset + "'  byteCount '" + byteCount);
HttpClient httpClient = new HttpClient();


PutMethod httpMethod = new PutMethod(fileUri);

httpMethod.addRequestHeader("Accept-Ranges", "bytes");
int total = byteOffset + byteCount;
String bytesMessage = "bytes=" + byteOffset + "-" + total;
Log.d(TAG, "bytesMessage " + bytesMessage);

httpMethod.addRequestHeader("Range", bytesMessage);
httpMethod.addRequestHeader("Cache-Control", "no-cache, no-store");
httpMethod.addRequestHeader("Overwrite", "T");

InputStream is = new ByteArrayInputStream(buffer);
RequestEntity requestEntity = new InputStreamRequestEntity(is, "text/plain");
httpMethod.setRequestEntity(requestEntity);

httpClient.executeMethod(httpMethod);

我在请求标头中缺少什么?

【问题讨论】:

    标签: android webdav ithit-webdav-server


    【解决方案1】:

    以下是正确的标头,使用它我可以使用偏移量和字节长度更新 webdav 服务器资源。

            HttpClient httpClient = new HttpClient();
    
            PutMethod httpMethod = new PutMethod(fileUri);
            httpMethod.addRequestHeader("Accept-Ranges", "bytes");
            int total = byteOffset + byteCount;
            int range = total-1;
    
            String rangeMessage = "bytes=" + byteOffset +"-" + range;
            Log.d(TAG, "rangeMessage " + rangeMessage);
    
            String lengthMessage = Integer.toString(byteCount);
            String contentRangeMessage = "bytes " + byteOffset +"-" + range + "/*";
    
            Log.d(TAG, "contentRangeMessage " + contentRangeMessage);
            Log.d(TAG, "lengthMessage " + lengthMessage);
    
            httpMethod.addRequestHeader("Content-Length", lengthMessage);
            httpMethod.addRequestHeader("Content-Range", contentRangeMessage);
            httpMethod.addRequestHeader("Cache-Control", "no-cache, no-store");
            httpMethod.addRequestHeader("Overwrite", "T");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 2020-02-23
      相关资源
      最近更新 更多