График Microsoft: обновление документа с помощью запроса Put Java - PullRequest
1 голос
/ 05 марта 2020

Основываясь на документации 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);

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...