OnlyOffice — доступ к локальным файлам с веб-сайта

#php #docker #localhost #onlyoffice

#php #docker #localhost #onlyoffice

Вопрос:

Я хочу иметь возможность открывать документы Office, которые присутствуют на моем компьютере, со своего веб-сайта (в долгосрочной перспективе это будут файлы, хранящиеся на сервере NAS нашей сети)

Итак, я установил OnlyOffice благодаря docker на свой компьютер с помощью этой команды (я на Windows 10)

 docker run -i -t -d -p 90:80 --restart=always onlyoffice/documentserver
 

Я использовал порт 90, потому что порт 80 уже используется Wamp

Затем на моем веб-сайте, размещенном локально, благодаря Wamp, я создал этот файл :

Index.html

 <div id="placeholder" style="height: 100%"></div>

<script type="text/javascript" src="http://localhost:90/web-apps/apps/api/documents/api.js"></script>
<script type="text/javascript">
  window.docEditor = new DocsAPI.DocEditor("placeholder",
  {
    "document": {
      "fileType": "docx",
      "title": "Example Document Title.docx",
      "url": "https://file-examples-com.github.io/uploads/2017/02/file-sample_500kB.docx"

    },
    "documentType": "word",
    "editorConfig": {
      "mode": "view"
    },
    "height": "100%",
    "width": "100%"
  });
</script>
 

(Используя URL внешнего сайта, это работает)

Поэтому я изменил свой скрипт, чтобы получить локально размещенный файл таким образом

ПРИМЕЧАНИЕ: http://mysite.test является ли vhost соответствующим http://localhost/mysite (на WAMP)

Index.html (версия 2)

 <script type="text/javascript" src="http://localhost:90/web-apps/apps/api/documents/api.js"></script>
<script type="text/javascript">
  window.docEditor = new DocsAPI.DocEditor("placeholder",
  {
    "document": {
      "fileType": "docx",
      "title": "Example Document Title.docx",
      "url": "http://mysite.test/get_file.php"

    },
    "documentType": "word",
    "editorConfig": {
      "mode": "view"
    },
    "height": "100%",
    "width": "100%"
  });
</script>
 

get_file.php

 <?php
$file_url = 'C:UsersuserDesktoptest.docx';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=test.docx"); 
readfile($file_url); 
?>
 

И там это не работает! (файл правильно загружен, если я получаю доступ непосредственно по ссылке http://mysite.test/get_file.php )

У меня есть эта ошибка на index.html :

 Download failed.
 

Журналы Docker :

 [2021-01-06T14:04:18.136] [ERROR] nodeJS - error downloadFile:url=http://mysite.test/get_file.php;attempt=3;code:null;connect:null;(id=127d6893c0ab2f9f8b71)
Error: Error response: statusCode:404 ;body:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /get_file.php</pre>
</body>
</html>
at Request._callback (/snapshot/server/build/server/Common/sources/utils.js:0:0)
at Request.init.self.callback (/snapshot/server/build/server/Common/node_modules/request/request.js:185:22)
at Request.emit (events.js:198:13)
at Request.<anonymous> (/snapshot/server/build/server/Common/node_modules/request/request.js:1154:10)
at Request.emit (events.js:198:13)
at Gunzip.<anonymous> (/snapshot/server/build/server/Common/node_modules/request/request.js:1076:12)
at Object.onceWrapper (events.js:286:20)
at Gunzip.emit (events.js:203:15)
at endReadableNT (_stream_readable.js:1143:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
 

Я использую get_file.php PHP-файл, потому что в конечном итоге это будет тот, кто будет управлять правами пользователей, уже присутствующих на сайте (например, пользователь1 может получить доступ только к файлам .docx, а пользователь2 — только к файлам .xlsx)

Можете ли вы сказать мне, как просмотреть мои локальные файлы (в будущем на сервере NAS) с помощью OnlyOffice?

Комментарии:

1. «не работает» означает, что именно? Это не исправляемая ошибка. Попробуйте предоставить конкретную техническую информацию — например, сообщения об ошибках в консоли или сетевых инструментах и / или сведения о том, как ведет себя программа.

2. @ADyson Извините, я забыл поместить сообщение об ошибке, я отредактировал свой пост (спасибо)

3. Из журнала похоже, что что-то каким-то образом перевело URL в http://mysite.test/get_file/ вместо http://mysite.test/get_file.php . Однако из того, что вы показали, не очевидно, как это произошло. Также в нем говорится nodeJS … при чем здесь NodeJS? До сих пор вы показывали JS на стороне клиента и PHP.

4. @ADyson Ошибка в ссылке исправлена, она пришла из моего htaccess, я изменил свой пост, но я понятия не имею, откуда взялся nodejs, я думаю, что это из OnlyOffice