Не удалось загрузить файл docx в OnlyOffice с помощью javascript

Мы интегрировали редактор OnlyOffice в наше приложение. Я хочу загрузить файл .docx со своего ПК на сервер OnlyOffice, чтобы мы могли использовать его позже для редактирования. Я отправляю POST-запрос на сервер, используя formdata, но он не работает. Ниже приведен мой код javascript:

app.post('/topic/:id/upload', (req, res) => {
  docManager.init(__dirname, req, res);
  //docManager.storagePath(''); // mkdir if not exist
  const userIp = docManager.curUserHostAddress();
  const uploadDir = `./public/${configServer.get('storageFolder')}/${userIp}`;
  const form = new formidable.IncomingForm();
  form.uploadDir = uploadDir;
  form.keepExtensions = true;

  form.parse(req, (err, fields, files) => {
    const file = files.uploadedFile;
    file.name = docManager.getCorrectName(file.name);

    if (configServer.get('maxFileSize') < file.size || file.size <= 0) {
      fs.unlinkSync(file.path);
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      res.write('{ "error": "File size is incorrect"}');
      res.end();
      return;
    }

    const exts = [].concat(
      configServer.get('viewedDocs'),
      configServer.get('editedDocs'),
      configServer.get('convertedDocs')
    );
    const curExt = fileUtility.getFileExtension(file.name);

    if (exts.indexOf(curExt) === -1) {
      fs.unlinkSync(file.path);
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      res.write('{ "error": "File type is not supported"}');
      res.end();
      return;
    }

    fs.rename(file.path, `${uploadDir}/${file.name}`, (err2) => {
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      if (err2) {
        res.write(`{ "error": "${err2}"}`);
      } else {
        res.write(`{ "filename": "${file.name}"}`);

        const userid = req.query.userid ? req.query.userid : 'uid-1';
        const firstname = req.query.firstname ? req.query.firstname : 'Jonn';
        const lastname = req.query.lastname ? req.query.lastname : 'Smith';

        docManager.saveFileData(file.name, userid, `${firstname} ${lastname}`);
        docManager.getFileData(file.name, docManager.curUserHostAddress());
      }
      res.end();
    });
  });
});

В начале в вызове form.parse() есть массив файлов. Этот массив поступает как пустой. И, следовательно, я получаю сообщение об ошибке:

TypeError: Невозможно прочитать имя свойства неопределенного

Ниже приведен код моего компонента:

uploadFile(topicId: any, files: File[]) {
    this.fileToUpload = files[0];
    let apiUrl = "/topic/" + topicId + "/upload";
    let headers = new Headers();
    headers.append('authorization', 'Bearer ' + localStorage.getItem('id_token'));
    headers.append('Access-Control-Allow-Origin', '*');
    let data = new FormData();
    data.append('file', this.fileToUpload);
    this.ooApiService.postUrl(apiUrl, data, {headers})
     .toPromise()
     .catch(
       (error: any) => this.handleError(error)
     );
  }

HTML-код:

  <form action="/upload" enctype="multipart/form-data" method="post">
    <input class="chooseFile" id="uploadedFile" type="file" [disabled]="isChosen" #fileInput (change)="chooseImage(fileInput.files)"/>
    <button *ngIf="userCanEditDetails" md-raised-button color="primary" (click)="uploadFile(topic.id, fileInput.files)">
      {{ "Upload file" | translate }}
    </button>
  </form>

Я вызываю этот запрос POST из моего клиентского приложения, которое находится в angular2, оттуда я выбираю и передаю файл в качестве данных формы. Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо.


person Nilakshi Naphade    schedule 19.02.2017    source источник


Ответы (1)


Хочу обратить ваше внимание на то, что вы используете пример интеграции. Это приложение используется для демонстрации функций редактора документов и не рекомендуется для использования в производственной среде. По предоставленной Вами информации документ просто не был отправлен на сервер ONLYOFFICE

Обратите внимание, что дефолтная версия тестового примера полностью функциональна, чтобы понять, почему он не работает после ваших изменений, нам также необходимо проанализировать клиентскую часть. Пожалуйста, пришлите нам код, как вы загружаете файл в менеджер документов. Вероятно, вы не отправили содержимое с данными о файле при отправке POST-запроса.

person ibnpetr    schedule 27.02.2017