Оперативное редактирование документов в веб-приложениях на основе J2EE с помощью OnlyOffice, но URL обратного вызова не работает

Мы работаем над веб-приложением с angularJS и используем spring/hibernate. Мы используем операционную систему Linux в производственной среде, а среда разработки - Windows. Мы пытаемся внедрить инструмент онлайн-редактирования документов, такой как ms-word, в наше приложение.

После некоторых исследований мы используем OnlyOffice https://api.onlyoffice.com/. Я использую следующий компонент angularJs для использования onlyOffice https://github.com/legalthings/angular-onlyoffice Мы можем интегрировать его с приложением, и мы можем увидеть открытый документ в редакторе в веб-браузере. Но мои изменения не сохраняются. Элемент управления не достигает callBackUrl.

Поскольку компонент angularJs использует метод onSave, которого больше нет в API OnlyOffice, я немного изменил код в html и JS-файле:- HTML-код файла: -

<div ng-controller="DocumentEditController">
  <onlyoffice-editor src="{{ trustSrc(document.src) }}"
                     title="{{ document.name }}">
  </onlyoffice-editor>
</div>

И код файла JS: -

angular.module('onlyoffice', []);

 angular.module('onlyoffice').directive('onlyofficeEditor', [function () {
 function key(k) {
 var result = k.replace(new RegExp("[^0-9-.a-zA-Z_=]", "g"), "_") + (new                                           

 Date()).getTime();
 return result.substring(result.length - Math.min(result.length, 50));
 }

 var getDocumentType = function (ext) {
 if (".docx.doc.odt.rtf.txt.html.htm.mht.pdf.djvu.fb2.epub.xps".indexOf(ext)             != -1) return "text";
if (".xls.xlsx.ods.csv".indexOf(ext) != -1) return "spreadsheet";
if (".pps.ppsx.ppt.pptx.odp".indexOf(ext) != -1) return "presentation";
return null;
};

return {
template: '<div id="onlyoffice-editor"></div>',

link: function ($scope, $element, $attrs) {
  $scope.$watch(function () {
    return $attrs.src;
  }, function () {
    if (!$attrs.src) return;
    var docUrl = $attrs.src;
    var docTitle = $attrs.title || docUrl;
    var docKey = key(docUrl);
    var docType = docUrl.split('?')[0].substring(docUrl.lastIndexOf(".") + 1).trim().toLowerCase();
    var documentType = getDocumentType(docType);

    var config = {
      type: "desktop",
      width: '100%',
      height: '100%',
      documentType: documentType,
      document: {
        title: docTitle,
        url: docUrl,
        fileType: docType,
        key: docKey,
        permissions: {
          edit: true,
          download: false
        }
      },
      editorConfig: {
        mode: 'edit',
        callbackUrl:"/documentSave"
      },
      events: {
        onReady: function () {alert("in on ready");
          setTimeout(function () {
            $scope.$apply(function () {
              $scope.ready = true;
            });
          }, 5000);
        },

        onError: function (event) {
            alert(event.data);
          //  var url = event.data;
           // $scope.save({url: url, close: $scope.close});
          },
        }
    };

    //creating object editing
    new DocsAPI.DocEditor("onlyoffice-editor", config);
  });
}
 }
 }]);

Я изменил documentmenSave на полное имя, используя localhost и appname, но это также не работает. Любая помощь высоко ценится.

редактировать

CallBackUrl теперь вызывается при закрытии кнопки браузера... Но наше требование - сохранить документ нажатием кнопки сохранения. Заранее спасибо.

1 ответ

Дело в том, что нажатие на кнопку "Сохранить" создает временный файл в редакторе документов. Версия рабочего документа будет создана только после закрытия редактора документов всеми пользователями (через десять секунд). Невозможно загрузить измененный документ в режиме реального времени (до его закрытия).

Другие вопросы по тегам