Основываясь на документации MS графа, я увидел, что могу обновить driveItem (файл) и поместить его в указанный c sharepoint диск. Приложение работает как приложение демона (без имени пользователя).
Для этого я использую эту точку входа:
PUT /drives/{drive-id}/items/{item-id}/content
Я пытаюсь кодировать, используя основной класс и передавая существующие параметры. Чтобы обновить документ, я вызываю метод обновления документа:
UpdateDocumentResponseModel updatedDocument = fileGraphs.updateDocument(token, DRIVELIBID, DOCUMENTID, INPUTPATH, DOCUPDATE);
Вызванный метод направлен на создание URL-адреса и подготовку данных для запроса PUT:
public UpdateDocumentResponseModel updateDocument(String accessToken,
String driveLibId,
String documentId,
String inpuPath,
String docName) throws MalformedURLException {
String fullPath = inpuPath + docName;
URL url = new URL("https://graph.microsoft.com/v1.0/drives/" + driveLibId + "/items/" + documentId + "/content");
return requestsBuilder.updateDocument(accessToken, url, fullPath);
}
Теперь на этом этапе Я должен сделать запрос:
public UpdateDocumentResponseModel updateDocument(String accessToken, URL url, String fullPath) {
UpdateDocumentResponseModel returnValue = new UpdateDocumentResponseModel();
try {
CloseableHttpClient client = HttpClients.createDefault();
HttpPut httpPut = new HttpPut(String.valueOf(url));
httpPut.setHeader("Authorization", "Bearer " + accessToken);
httpPut.setHeader("Accept","application/json");
httpPut.setHeader("Content-Type","plain/text");
httpPut.setHeader("Connection", "Keep-Alive");
httpPut.setHeader("Cache-Control", "no-cache");
// read the file and convert to stream
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody("file", new File(fullPath),
ContentType.APPLICATION_OCTET_STREAM, "file.ext");
HttpEntity multipart = builder.build();
httpPut.setEntity(multipart);
CloseableHttpResponse response = client.execute(httpPut);
System.out.println("\nSending 'UPDATE' request to URL : " + url);
System.out.println("Response Code : " + response.getStatusLine());
// set the response
returnValue.setDocumentName(fullPath);
returnValue.setUpdatedAt(new Date());
returnValue.setUpdateStatus("Success");
} catch (IOException e) {
returnValue.setDocumentName(fullPath);
returnValue.setUpdatedAt(new Date());
returnValue.setUpdateStatus("Failure" + e.getCause());
e.printStackTrace();
}
return returnValue;
}
Моя проблема в том, что когда я отправляю обратно файл docx, этот файл загружается неправильно. Файл загружен (хорошая вещь), но не читается на онлайн-портале sharepoint и должен быть загружен. Вторая проблема заключается в том, что я могу взять любой файл: do c, docx, ppt, xls, xlsx, txt, images ...
Я думаю, что у меня возникнут другие проблемы. Есть ли библиотека, которая может помочь мне обработать расширение файла и правильно конвертировать файлы. Моя проблема заключается в том, что мне не придется обрабатывать файлы MS Office, но любые типы.
Моя проблема явно здесь:
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody("file", new File(fullPath),
ContentType.APPLICATION_OCTET_STREAM, "file.ext");
HttpEntity multipart = builder.build();
httpPut.setEntity(multipart);
CloseableHttpResponse response = client.execute(httpPut);
Спасибо!