Сбой приложения React Node при загрузке файла - PullRequest
0 голосов
/ 01 апреля 2019

Я создаю приложение с использованием Node и реагирую как часть моего учебного процесса. Те, которые скрывают HTTP, https ссылки на торрент. Проблема в том, что мне нужно сначала скачать файл, чтобы преобразовать его в торрент. Приложение работает нормально, когда дело доходит до небольших файлов. Но если это большой файл, например, One GB, произойдет сбой и произойдет сбой приложения.

вот ссылка на мой проект: -

https://github.com/savadks95/FireBit/blob/master/server.js

Может кто-нибудь сказать, пожалуйста, как это исправить. И я также хочу показать процесс загрузки.

var http = require("http");
var webtorrentify = require("webtorrentify-link");
var fs = require("fs");
var url = require("url");
var path = require("path");
var validUrl = require("valid-url");
var express = require("express");
var getUrls = require("get-urls");
var remote = require("remote-file-size");
var app = express();

var downloadLink;
var fileName;
var fileSize;
var server;
var parsed;
var param;
var link;
var port;
port = process.env.PORT || 80;

app.get("/favicon.ico", function(req, res) {
  console.log("favicon request recived");
});
app.get("*", function(req, res) {
  if (req.url === "/") {
    //app.use('/public/html', express.static(path.join(__dirname)));
    fs.readFile("public/html/index.html", function(err, data) {
      res.write(data);
    });
  } else if (req.url === "/l?thelink=") {
    fs.readFile("public/html/emptyRequest.html", function(err, data) {
      res.write(data);
      res.end();
    });
  } else {
    //---------Reciving Url--------------------
    console.log(req.query.thelink);
    downloadLink = req.query.thelink;
    //-----------------------------------------

    //------------checking for valid url-------
    if (validUrl.isUri(downloadLink)) {
      console.log("Looks like an URI");
      //-----------------------------------------

      //----------Extracting filename-------------
      parsed = url.parse(downloadLink);
      fileName = path.basename(parsed.pathname);
      console.log(path.basename(parsed.pathname));
      //-------------------------------------------

      //----------Finding File size----------------
      remote(downloadLink, function(err, o) {
        fileSize = o / 1024 / 1024;
        console.log("size of " + fileName + " = " + fileSize + " MB");
        //-------------------------------------------
        if (fileSize < 501) {
          ///////////////Creating Torrent////////////////////
          webtorrentify(downloadLink).then(function(buffer) {
            console.log("creating the torrent");
            //res.send('what is');
            //-------------------------------------------
            res.setHeader("Content-Type", "application/x-bittorrent");
            res.setHeader(
              "Content-Disposition",
              `inline; filename="${fileName}.torrent"`
            );
            res.setHeader("Cache-Control", "public, max-age=2592000"); // 30 days
            res.send(buffer);
            console.log(fileName + ".torrent created");
            res.end();
            //-------------------------------------------
          });
          ////////////////////////////////////////////////
        } else {
          console.log("More than 500 MB");
          res.send("<h4> More than 500 MB or invalid URL </h4>");
        }
      });
    } else {
      console.log("not url");
      fs.readFile("public/html/404.html", function(err, data) {
        res.write(data);
        res.end();
      });
    }
  }
});

app.listen(port);
...