使用express 4的实现文件上传

使用模块node-multiparty实现文件上传

由于Express 4与Express 3的在中间件的使用上具有很大的不同:许多以前内置在Express 3中的中间件,现在都需要自己通过npm进行下载,操作。今天刚好碰到一个要修改文件上传功能的中间件。所以抛弃了原有的bodyParser中间件,在gitHub上找到了node-multiparty模块,跟着API做了一个小例子,分享给大家。

首先来看客户端代码

<!DOCTYPE html>
<html>
<head>
    <title>向服务器上传文件</title>
    <meta charset="utf-8">
    <script>
        function uploadFile(){
            var formData = new FormData();
            var files = document.getElementById(‘file‘).files;
            var file = files[0];
            formData.append(‘myfile‘, file);

            var xhr = new XMLHttpRequest();
            xhr.open(‘POST‘, ‘index.html‘, true);
            xhr.onload = function (e){
                if (this.status == 200){
                     document.getElementById(‘result‘).innerHTML = this.response;
                }
            };
            xhr.send(formData);
        }
    </script>
</head>
<body>
<h1>使用bodyParser中间件上传文件</h1>
<form id = ‘form1‘ enctype="multipart/form-data">
    请选择文件<input type="file" id="file" name="file"><br>
    <input type="button" value="上传文件" onclick="uploadFile();"><br>
</form>
<output id="result"></output>
</body>
</html>

服务端代码如下:

var express = require(‘express‘);
var fs = require(‘fs‘);
var multiparty = require(‘multiparty‘);

var app = express();

app.get(‘/index.html‘, function (req, res){
    res.sendFile(__dirname + ‘/index.html‘);
});

app.post(‘/index.html‘, function (req, res){

    var form = new multiparty.Form({uploadDir: ‘./public‘});
    form.on(‘error‘, function(err) {
        console.log(‘Error parsing form: ‘ + err.stack);
    });
    form.parse(req, function (err, fields, files){
        var filesTmp = JSON.stringify(files,null,2);

        if (err){
            console.log(‘parse error: ‘ + err);
            res.send("写文件操作失败。");

        }else {
            res.send("文件上传成功");
            console.log(‘parse files: ‘ + filesTmp);

            var fileNameArr = Object.keys(files);
            var firstFilename = fileNameArr[0];
            var fileDataArr = files[firstFilename];
            console.log( typeof fileDataArr);
            console.log(fileDataArr);
            var fileData = fileDataArr[0];

            var uploadedPath = fileData.path;
            var dstPath = ‘./public/‘ + fileData.originalFilename;
            fs.rename(uploadedPath, dstPath, function(err) {
                if (err){
                    console.log("重命名文件错误:"+ err);
                } else {
                    console.log("重命名文件成功。");
                }
            });
        }
    });
});

app.listen(1337, ‘127.0.0.1‘);

启动服务端:node app.js

在浏览器中输入:http://localhost:1337/index.html,你会看到如下的界面

点击选择任意文件,然后在点击上传文件,你会看到在你的项目更目录下的public文件夹下多出了你刚才上传的文件。。

另外也可以使用multer模块来实现文件上传

时间: 2024-10-24 02:56:23

使用express 4的实现文件上传的相关文章

使用nodejs+express(4.x+)实现文件上传

最简单的做法是通过“connect-multiparty”中间件实现上传. 通过在项目中npm install connect-multiparty进行安装. 用法: var multipart = require('connect-multiparty'); var multipartMiddleware = multipart(); app.post('/upload', multipartMiddleware, function(req, resp) { console.log(req.b

一个简单的blog系统(三) 增加文件上传功能

1. 一个完整的博客怎么能缺少图片呢,目前上传文件的方法有三种: (1)使用Express自带的文件上传功能,不涉及数据库. (2)使用Formidable外部模块,不涉及数据库. (3)上传到MongoDB,涉及到数据库. 可以看出,第一种方式最简单,Express通过bodyParser()解析请求体,因此我们可以使用bodyParser()来实现文件的上传功能. 2.实现过程 2.1 首先打开header.ejs,在<li><a href="/post" tit

Node.js 博客实例(三)添加文件上传功能

原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件眼下有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 Formidable 外部模块,不涉及数据库 上传到 MongoDB ,涉及数据库 这里使用第一种,用户将文件上,存储于:blog/public/images/文件夹下. blog/views/header.ejs  在<span><a title="发表" href=&quo

Node.js 博客实例(三)增加文件上传功能

原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件目前有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 Formidable 外部模块,不涉及数据库 上传到 MongoDB ,涉及数据库 这里使用第一种,用户将文件上,存储于:blog/public/images/目录下. blog/views/header.ejs  在<span><a title="发表" href="

Node.js文件上传

Node.js express使用Multer实现文件上传html部分 <div> <h3>文件上传:</h3> 选择一个文件上传: <br/> <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="content&quo

express 4.x 文件上传

1.安装文件上传模块: npm install multiparty --save 2.在routes/index.js 中添加: // 引用模块 let multiparty = require("multiparty"); // 定义文件提交url 类型为post router.post('/upload', function (req, res, next) { // 指定文件保存路径 var form = new multiparty.Form({uploadDir: './p

Nodejs进阶:基于express+multer的文件上传

安装组件 npm install express multer --save 服务端代码server.js var Express = require('express'); var multer = require('multer'); var bodyParser = require('body-parser'); var app = Express(); app.use(bodyParser.json()); // multer 提供了 storage 这个参数来对资源保存的路径.文件名进

express文件上传中间件Multer详解

Express默认并不处理HTTP请求体中的数据,对于普通请求体(JSON.二进制.字符串)数据,可以使用body-parser中间件.而文件上传(multipart/form-data请求),可以基于请求流处理,也可以使用formidable模块或Multer中间件. 1. multer中间件 Multer是Express官方推出的,用于Node.jsmultipart/form-data请求数据处理的中间件. 它基于busboy构建,可以高效的处理文件上传,但并不处理multipart/fo

node express formidable 文件上传后修改文件名

//我是用php的思想来学习nodejs var express = require('express'); var router = express.Router(); var fs = require('fs'); var path= require("path"); var formidable = require('formidable'); /* GET home page. */ router.get('/', function(req, res, next) { res.