2015-07-03 4 views
0

Я пишу приложение для Android, в котором я использую библиотеку Jackrabbit WebDAV.Как обновить ресурс сервера с помощью WebDAV

С помощью этой библиотеки 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); 

Что мне недостает в заголовке запроса?

ответ

0

Ниже приведены правильные заголовки, используя это. Я могу обновить ресурсы сервера 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"); 

 Смежные вопросы

  • Нет связанных вопросов^_^