JAVA WOPI: каким должен быть тип возвращаемого значения API GetFileContent?

Я успешно внедрил узел JAVA WOPI с клиентом Microsoft Office Online в рамках их Партнерской программы облачного хранилища Office 365

Теперь я хочу реализовать тот же процесс с помощью настраиваемого клиента WOPI (Office Сервер веб-приложений).
Я предполагаю, что в код хоста wopi будут внесены минимальные изменения. До сих пор я реализовал следующие вещи:

  • Развернутый сервер Office Web Apps на Windows Server 2012 R2.
  • Вверх WOPI Host
  • GetFileInfo API - это первый API, который должен вызывать, и да, он вызывается, и я вижу JSON с правильными значениями.
  • API GetFileContent также вызывается сразу после вызова API GetFileInfo, но я не вижу файл в браузере.

введите описание изображения здесь


Ниже приведен фрагмент кода JAVA для получения содержимого файла. Я вижу, что этот метод вызывается и отправляет обратно содержимое файла в байтовых потоках, но я не вижу файл в браузере.

    @GET
    @Path("/{fileName}/contents")
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response getFileContent(@PathParam("fileName") String fileName,@Context HttpServletRequest httpRequest) {

    final String filePath = "C:/wopi-docs/"+fileName;
    File file = new File(filePath);

    byte[] content = null;
     try {  

        content = FileUtils.readFileToByteArray(file);      

    } catch (IOException e) {
        e.printStackTrace();
    }
     return Response.status(Response.Status.OK).entity(new ByteArrayInputStream(content)).build();
} 

Это тот же метод, который работает, когда мы используем его с Office Online, но не работает с Сервером Office Web Apps.

Мы будем очень благодарны за любой ввод или указатели.


person Soumyaansh    schedule 25.05.2016    source источник
comment
Какой тип файла вы пытаетесь редактировать? Word, Excel? Вы говорите, что развернули OWA (не OOS), которому нужен COBALT для Word ... это может быть причиной. Дополнительная информация на stackoverflow.com/questions/ 39062025 /   -  person rocky    schedule 26.07.2017


Ответы (1)


Optional<java.nio.file.Path> first = findFile(fileId);
        if (first.isPresent()) {
            return Response.ok(new File(first.get().toUri()), APPLICATION_OCTET_STREAM).build();
        } else {
            return Response.status(Status.BAD_REQUEST.getStatusCode(), "No file found with the " +
                    "name " + fileId).build();
        }

private Optional<java.nio.file.Path> findFile(String fileName) throws IOException {
    File filePath= getPath();

    try (Stream<java.nio.file.Path> stream = Files.find(filePath, 1, (path, attr) -> path.getFileName().toString().toLowerCase().equals(fileName.toLowerCase()))) {
        return stream.findFirst();
    }
}

Этот код у меня работает. Вы можете попробовать это

person Monika    schedule 20.08.2019