【问题标题】:Uploading files with node js and express使用 node js 和 express 上传文件
【发布时间】:2018-11-13 19:33:19
【问题描述】:

我正在尝试将 .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 端口启动应用程序并且可用。

  1. 在方法 2 中,我试图避免创建新端口(因为在像 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 状态的错误页面,如下所示:

尝试了我已知的可能方法,但仍然需要有关如何解决此问题并顺利上传文件的帮助。

提前致谢。

【问题讨论】:

  • 您在 express 中的处理程序是 GET,而不是 POST。我会检查你的动词。
  • 老实说,我认为您应该花一些时间了解 express 的基础知识
  • @ZadikiHassanOchola 同意!这样做

标签: javascript node.js express file-upload http-post


【解决方案1】:

基本上,您在代码中所说的是“当有对 '/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');

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2017-03-01
    • 2021-08-15
    • 1970-01-01
    • 2019-07-06
    • 2017-01-12
    • 2017-11-12
    相关资源
    最近更新 更多