Express, Apache, Ubuntu, загрузка файла, 1 минута, Broken Pipe, большой файл - PullRequest
0 голосов
/ 02 мая 2020

Я использую Express, Apache, Ubuntu, я пытаюсь загрузить файлы на сервер. все нормально, но если время загрузки превышает «1 минуту», отметьте, что загрузка возобновляется, и на стороне клиента ничего странного не происходит, пока загрузка не завершится и не произойдет ошибка Cors «В запрошенном заголовке« Access-Control-Allow-Origin »нет» ресурс." на консоли клиента. с помощью Chrome Speed ​​Limiter мне удалось установить скорость загрузки, поэтому мой файл будет загружен с точностью "1.6 мин". Между тем на сервере журнал Express показывает, что ровно через 2 минуты вызывается метод внутри app.POST (console.log (req.body)), и я вижу, что req.body является неполной версией отправленных данных. , он имеет только 1 из свойств, которые я послал для него. это означает, что тайм-аут 2 минут NodeJs работает. если я уменьшу скорость chrome, то точное требование будет показано в бэкэнд-консоли. Честно говоря, я попробовал ВСЕ руководства в inte rnet, и ничего не помогло мне. увеличение времени ожидания узла тоже не помогло

на Apche, который я получал: [proxy: error] [pid 20435] (32) Сломанный канал: [клиент] AH01084: тело запроса на передачу не удалось XXXX (localhost), реферер: http://localhost: 8080 / загрузка [proxy_ http:error] [pid 20435] [клиент] AH01097: телу запроса на передачу не удалось получить XXXX (localhost) от .... (), реферер: http://localhost: 8080 / upload

просто ПОЖАЛУЙСТА, кто-нибудь привел полный пример ПРАВИЛЬНОЙ конфигурации для этой работы, потому что мне даже было трудно выяснить, что такое "сервер" для server.timeout, потому что я НЕ ИСПОЛЬЗУЮ HTTP для СОЗДАНИЯ ВЕБ-СЕРВЕРА, И Я НОВЫЙ ДЛЯ УЗЛА.

apache proxy Config:

ProxyPass /upload http://localhost:xxxx/upload
ProxyPassReverse /upload http://localhost:xxxx/upload

Route Config:

    var timeout = require("connect-timeout");
    app.use(timeout("200s"));
    app.post("/upload", async (req, res) => {
      console.log(new Date());
      console.log("called");
      console.log(req.body);
      if (!req.files) {
        console.log("no file");
        res.send({
          status: false,
          message: "No file uploaded",
        });
      } else {
        let video = req.files.video;
        console.log(video)
      }
})

index. js: (с использованием класса и конструктора)

  run() {
    this.expressApp.listen(this.configs.port, () => {
      console.log(
        "Express server running project on port " + this.configs.port + "."
      );
      console.log(`Environment: ${process.env.STAGE || "development"}`);
    });
  }
const app = new App();
app.applyMiddleware();
app.run();

FormData Отправлено на сервер: (ВНИМАНИЕ: видео добавлено после "uploadeBy")

      const formData = new FormData(uploadForm);
      formData.append("uploadedBy", this.currentUser.username);
      formData.append("video", this.videoFileInput);
      formData.append("videoTitle", this.form.videoTitle);
      formData.append("description", this.form.description);
      formData.append("province", this.form.province);
      formData.append("category", this.form.category);
      formData.append("subcategory", this.form.subcategory);
      formData.append("tags", this.form.tags);

complete Req.Body:

{                                                                                                      
   uploadedBy: 'aa',                                                                                   
   videoTitle: '654',                                                                                  
   description: '654',                                                                                 
   province: '1',                                                                                      
   category: '1',                                                                                      
   subcategory: '1',                                                                                   
   tags: '654'                                                                                         
 }                                                                                                     
 {                                                                                                     
   name: 'file_example_MP4_480_1_5MG.mp4',                                                             
   data: <Buffer 00 00 00 20 66 74 79 70 6d 70 34 32 00 00 00 00 6d 70 34 32 6d 70 34 31 69 73 6f 6d 61
   size: 1570024,                                                                                      
   encoding: '7bit',                                                                                   
   tempFilePath: '',                                                                                   
   truncated: false,                                                                                   
   mimetype: 'video/mp4',                                                                              
   md5: 'd9061d3da8601932e98f79ec8ba1c877',                                                            
   mv: [Function: mv]                                                                                  
 }     

неполная версия, когда время увеличивается:

{ uploadedBy: 'aa' } 

PS: Почтальон Реакция на этот вопрос включена Небольшой файл, который требует менее 1 минуты, успешно загружается, и на файл большего размера отклик:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
    <head>
        <title>502 Bad Gateway</title>
    </head>
    <body>
        <h1>Bad Gateway</h1>
        <p>The proxy server received an invalid
response from an upstream server.
            <br />
        </p>
        <hr>
        <address>Apache/2.4.18 (Ubuntu) Server at api.safarvision.com Port 80</address>
    </body>
</html>

PS: когда я запускаю свой сервер Node локально и имитирую время более 1 минуты (около 10 минут), загрузка происходит нормально! похоже проблема заключается в apache обратном прокси и узле. так как он работает на локальном узле в порядке со временем более 1 минуты.

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