React Node应用程序在下载文件时崩溃

时间:2019-04-01 12:11:08

标签: node.js reactjs file-writing torrent

我正在使用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);

0 个答案:

没有答案