Загрузка файлов с помощью узла js и express - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь загрузить файл .mp3 на сервер узла в моем локальном компьютере.Для этого я использовал 2 подхода:

  1. Использование uploadit.js в качестве отдельного файла - в этом

http.createServer(function(req, res){
	if(req.url == "/fileupload"){
		var form = new formidable.IncomingForm();
		form.parse(req, function(err, fields, files){
			var oldpath = files.filetoupload.path;
			var newpath = './audio/audio.mp3';
			fs.readFile(oldpath, function(err, data){
				if(err) throw err;
				fs.writeFile(newpath, data, function(err){
					if(err) throw err;
					res.write('<center>File uplaoded and saved</center>');
					res.end();
				});
				fs.unlink(oldpath, function(err){
					if(err) throw err;
				});
			});
		});
	}
	else{
		res.writeHead(200, {'Content-Type': 'text/html'});
		res.write('<div><form action="fileupload" method="post" enctype="multipart/form-data">');
		res.write('<input type="file" name="filetoupload"><br>');
		res.write('<input type="submit" >');
		res.write('</form></div>');
		return res.end();
	}
}).listen(4200);

Приложение запускается через порт 4200 и доступно.

В Подходе 2 я пытался избежать создания нового порта (так как при запуске в env. Наподобие Heroku невозможно получить доступ к ПОРТУ).Поэтому я попытался интегрировать код в другой файл, когда он загружает содержимое файла

var express = require('express');
var app = express();
var server = require('http').Server(app);
var fs = require('fs');
var io = require('socket.io')(server);
var ss = require('socket.io-stream');

app.use(express.static(`${__dirname}/html`));

server.listen('5001');

app.get('/uploadform', function (req, res) {
	if(req.url == "/fileupload"){
		var form = new formidable.IncomingForm();
		form.parse(req, function(err, fields, files){
			var oldpath = files.filetoupload.path;
			var newpath = './audio/audio.mp3';
			fs.readFile(oldpath, function(err, data){
				if(err) throw err;
				fs.writeFile(newpath, data, function(err){
					if(err) throw err;
					res.writeHead(200, {'Content-Type': 'text/html'});
					res.write('<center>File uplaoded and saved</center>');
					res.end();
				});
				fs.unlink(oldpath, function(err){
					if(err) throw err;
				});
			});
		});
	}
	else{
		res.writeHead(200, {'Content-Type': 'text/html'});
		res.write('<div'>
		res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
		res.write('<input type="file" name="filetoupload"><br>');
		res.write('<input type="submit"');
		res.write('</form></div>');
		return res.end();
	} 
});  

Здесь, когда я выбираю файл и нажимаю кнопку отправки, он выводит меня на страницу ошибки со статусом 404, как показано ниже:

enter image description here

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

Заранее спасибо.

1 Ответ

0 голосов
/ 14 ноября 2018

По сути, вы говорите в своем коде: «когда есть запрос get для« / uploadform », затем вызовите функцию», а затем внутри функции, которую вы говорите, если req.url равен «/ fileupload», выполните работа. как может req.url быть равным '/ uploadform', а также равным '/ fileupload' в то же время. Я думаю, что лучший способ сделать это будет

var express = require('express');
var app = express();
var server = require('http').Server(app);
var fs = require('fs');
var io = require('socket.io')(server);
var ss = require('socket.io-stream');

app.use(express.static(`${__dirname}/html`));


app.get('/uploadform', function (req, res) {

    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<div'>
    res.write('<form action="fileupload" method="post" enctype="multipart/form- 
    data">');
    res.write('<input type="file" name="filetoupload"><br>');
    res.write('<input type="submit"');
    res.write('</form></div>');
    return res.end();
  }); 
  app.post("/fileupload",function(req,res,next){
    var form = new formidable.IncomingForm();
    form.parse(req, function(err, fields, files){
        var oldpath = files.filetoupload.path;
        var newpath = './audio/audio.mp3';
        fs.readFile(oldpath, function(err, data){
            if(err) throw err;
            fs.writeFile(newpath, data, function(err){
                if(err) throw err;
                res.writeHead(200, {'Content-Type': 'text/html'});
                res.write('<center>File uplaoded and saved</center>');
                res.end();
            });
            fs.unlink(oldpath, function(err){
                if(err) throw err;
            });
        });
    });

});
server.listen(process.env.port||'5001');

Надеюсь, это поможет

...