861 Stimmen

Node.js-Schnell-Dateiserver (statische Dateien über HTTP)

Gibt es ein einsatzbereites Node.js-Tool (installiert mit npm ), die mir helfen würde, Ordnerinhalte als Dateiserver über HTTP zu veröffentlichen.

Beispiel: Wenn ich Folgendes habe

D:\Folder\file.zip
D:\Folder\file2.html
D:\Folder\folder\file-in-folder.jpg

Dann ab D:\Folder\ node node-file-server.js Ich konnte auf die Datei über

http://hostname/file.zip
http://hostname/file2.html
http://hostname/folder/file-in-folder.jpg

Warum lässt mein Node Static File Server Anfragen fallen? Bezug auf einige mystische

Standard-Node.js-Server für statische Dateien

Wenn es ein solches Tool nicht gibt, welchen Rahmen sollte ich dann verwenden?

Verwandt: Grundlegender statischer Dateiserver in NodeJS

37voto

Oleg Punkte 9091

verbinden könnte das sein, wonach Sie suchen.

Leicht zu installieren mit:

npm install connect

Dann könnte der einfachste statische Dateiserver wie folgt geschrieben werden:

var connect = require('connect'),
    directory = '/path/to/Folder';

connect()
    .use(connect.static(directory))
    .listen(80);

console.log('Listening on port 80.');

33voto

Qwerty Punkte 24128

One-line™ Beweise statt Versprechen

enter image description here

Die erste ist http-server , hs - Link

npm i -g http-server   // install
hs C:\repos            // run with one line?? FTW!!

Die zweite ist serve von ZEIT.co - Link

npm i -g serve         // install
serve C:\repos         // run with one line?? FTW!!

Nachfolgend finden Sie die Optionen, die Ihnen bei Ihrer Entscheidung helfen können.

C:\\Users\\Qwerty>http-server --help
usage: http-server \[path\] \[options\]

options:
  -p           Port to use \[8080\]
  -a           Address to use \[0.0.0.0\]
  -d           Show directory listings \[true\]
  -i           Display autoIndex \[true\]
  -g --gzip    Serve gzip files when possible \[false\]
  -e --ext     Default file extension if none supplied \[none\]
  -s --silent  Suppress log messages from output
  --cors\[=headers\]   Enable CORS via the "Access-Control-Allow-Origin" header
                     Optionally provide CORS headers list separated by commas
  -o \[path\]    Open browser window after starting the server
  -c           Cache time (max-age) in seconds \[3600\], e.g. -c10 for 10 seconds.
               To disable caching, use -c-1.
  -U --utc     Use UTC time format in log messages.

  -P --proxy   Fallback proxy if the request cannot be resolved. e.g.: http://someurl.com

  -S --ssl     Enable https.
  -C --cert    Path to ssl cert file (default: cert.pem).
  -K --key     Path to ssl key file (default: key.pem).

  -r --robots  Respond to /robots.txt \[User-agent: \*\\nDisallow: /\]
  -h --help    Print this list and exit.
    C:\\Users\\Qwerty>serve --help

  Usage: serve.js \[options\] \[command\]

  Commands:

    help  Display help

  Options:

    -a, --auth      Serve behind basic auth
    -c, --cache     Time in milliseconds for caching files in the browser
    -n, --clipless  Don't copy address to clipboard (disabled by default)
    -C, --cors      Setup \* CORS headers to allow requests from any origin (disabled by default)
    -h, --help      Output usage information
    -i, --ignore    Files and directories to ignore
    -o, --open      Open local address in browser (disabled by default)
    -p, --port   Port to listen on (defaults to 5000)
    -S, --silent    Don't log anything to the console
    -s, --single    Serve single page applications (sets \`-c\` to 1 day)
    -t, --treeless  Don't display statics tree (disabled by default)
    -u, --unzipped  Disable GZIP compression
    -v, --version   Output the version number

Wenn Sie auf Änderungen achten müssen, siehe hostr , Kredit Henry Tseng's Antwort

32voto

pasx Punkte 2222

Installieren Sie express mit npm: https://expressjs.com/en/starter/installing.html

Erstellen Sie eine Datei mit dem Namen server.js auf der gleichen Ebene wie Ihre index.html mit diesem Inhalt:

var express = require('express');
var server = express();
server.use(express.static(__dirname));
server.listen(8080);

Dadurch wird Ihre index.html-Datei geladen. Wenn Sie die zu ladende HTML-Datei angeben möchten, verwenden Sie diese Syntax:

server.use('/', express.static(__dirname + '/myfile.html'));

Wenn Sie sie an einem anderen Ort ablegen möchten, geben Sie den Pfad in der dritten Zeile an:

server.use('/', express.static(__dirname + '/public'));

CD in den Ordner, der Ihre Datei enthält, und führen Sie node von der Konsole aus mit diesem Befehl aus:

node server.js

Durchsuchen Sie localhost:8080

19voto

Jacksonkr Punkte 30530

DEMO/PROTO NUR SERVER

Wenn das alles ist, was Sie brauchen, versuchen Sie dies:

const fs = require('fs'),
      http = require('http'),
      arg = process.argv.slice(2),
      rootdir = arg[0] || process.cwd(),
      port = process.env.PORT || 9000,
      hostname = process.env.HOST || '127.0.0.1';
//tested on node=v10.19.0
http.createServer(function (req, res) {

  try {
    // change 'path///to/////dir' -> 'path/to/dir'
    req_url = decodeURIComponent(req.url).replace(/\/+/g, '/');

    stats = fs.statSync(rootdir + req_url);

    if (stats.isFile()) {
      buffer = fs.createReadStream(rootdir + req_url);
      buffer.on('open', () => buffer.pipe(res));
      return;
    }

    if (stats.isDirectory()) {
      //Get list of files and folder in requested directory
      lsof = fs.readdirSync(rootdir + req_url, {encoding:'utf8', withFileTypes:false});
      // make an html page with the list of files and send to browser
      res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
      res.end(html_page(`http://${hostname}:${port}`, req_url, lsof));
      return;
    }

  } catch (err) {
      res.writeHead(404);
      res.end(err);
      return;
  }
}).listen(port, hostname, () => console.log(`Server running at http://${hostname}:${port}`));

function html_page(host, req_url, lsof) {//this is a Function declarations can be called before it is defined
  // Add link to root directory and parent directory if not already in root directory
  list = req_url == '/' ? [] : [`<a href="${host}">/</a>`,
  `<a href="${host}${encodeURI(req_url.slice(0,req_url.lastIndexOf('/')))}">..</a>`];

  templete = (host, req_url, file) => {// the above is a Function expressions cannot be called before it is defined
    return `<a href="${host}${encodeURI(req_url)}${req_url.slice(-1) == '/' ? '' : '/'}${encodeURI(file)}">${file}</a>`; }

  // Add all the links to the files and folder in requested directory
  lsof.forEach(file => {
    list.push(templete(host, req_url, file));
  });

  return `
<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html" charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Directory of ${req_url}</title>
</head>
<body>
<h2>Directory of ${req_url}</h2>
${list.join('<br/>\n')}
</body>
</html>`
}

13voto

muratgozel Punkte 2025

In einfachem node.js:

const http = require('http')
const fs = require('fs')
const path = require('path')

process.on('uncaughtException', err => console.error('uncaughtException', err))
process.on('unhandledRejection', err => console.error('unhandledRejection', err))

const publicFolder = process.argv.length > 2 ? process.argv[2] : '.'
const port = process.argv.length > 3 ? process.argv[3] : 8080

const mediaTypes = {
  zip: 'application/zip',
  jpg: 'image/jpeg',
  html: 'text/html',
  /* add more media types */
}

const server = http.createServer(function(request, response) {
  console.log(request.method + ' ' + request.url)

  const filepath = path.join(publicFolder, request.url)
  fs.readFile(filepath, function(err, data) {
    if (err) {
      response.statusCode = 404
      return response.end('File not found or you made an invalid request.')
    }

    let mediaType = 'text/html'
    const ext = path.extname(filepath)
    if (ext.length > 0 && mediaTypes.hasOwnProperty(ext.slice(1))) {
      mediaType = mediaTypes[ext.slice(1)]
    }

    response.setHeader('Content-Type', mediaType)
    response.end(data)
  })
})

server.on('clientError', function onClientError(err, socket) {
  console.log('clientError', err)
  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
})

server.listen(port, '127.0.0.1', function() {
  console.log(' Development server is online.')
})

Dies ist ein einfacher node.js-Server, der nur angeforderte Dateien in einem bestimmten Verzeichnis bereitstellt.

Verwendung:

node server.js folder port

folder kann absolut oder relativ sein, abhängig von der server.js Standort. Der Standardwert ist . das ist das Verzeichnis, in dem Sie node server.js Befehl.

port ist standardmäßig 8080, aber Sie können jeden in Ihrem Betriebssystem verfügbaren Port angeben.

In Ihrem Fall würde ich das tun:

cd D:\Folder
node server.js

Sie können die Dateien unter D:\Folder in einem Browser durch Eingabe von http://127.0.0.1:8080/somefolder/somefile.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X