美文网首页node
node + express4 + multiparty 实现文

node + express4 + multiparty 实现文

作者: XSeventrap | 来源:发表于2017-09-11 16:51 被阅读0次

[ TOC ]

原因:

因为最近在开发一个基因比对的一个项目,需要将本地文件上传至服务器,然后再读取其中的数据与数据库中的数据进行比对,计算出相似度。

开发软件

Mac + webstrom(2017.1.3) + node(v8.2.0)

实现过程

step1:
打开webstrom新建一个空项目,命名为upload,在Terminal中输入如下命令:

npm init(然后一路enter)

npm install express --save-dev
npm install ejs --save-dev
npm install fs --save-dev
npm install multiparty --save-dev

step2:
创建文件目录,并在views文件夹下面添加index.html文件,如下图所示:

upload
....node_modules
....uploads
....views
    ....index.html
....app.js
....package.json
....package-lock.json

step3:
编写app.js文件

//加载库文件
var express = require('express'),
    path = require('path'),
    ejs = require('ejs'),
    fs = require('fs'),
    multiparty = require('multiparty'),
    app = express();

//设置模板引擎
app.engine('.html', ejs.renderFile);
app.set('view engine', 'html');
//设置模板目录
app.set('views', path.join(__dirname, 'views'));

//获取index.html页面
app.get('/', function (req, res) {
    res.render('./index');
});

app.post('/upload', function (req, res) {
    var form = new multiparty.Form({uploadDir: './uploads'});
    form.parse(req, function(err, fields, files) {
        var fileOriginalFilename = files.thumbnail[0].originalFilename;
        var filePath = files.thumbnail[0].path;
        var dstPath = './uploads/' + fileOriginalFilename;
        fs.rename(filePath, dstPath, function (err) {
            if (err) {
                console.log('rename error: ' + err);
            } else {
                console.log('rename ok');
            }
        });
        res.send('upload success');
    });
});

//创建web服务器,访问"http://localhost:3002"
var server = app.listen(3002, function () {
    var host = server.address().address;
    var port = server.address().port;
    console.log('App listening at http://%s%s', host, port);
});

step4:
编写index.html文件

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>upload</title>
</head>
<body>
<form id="formOne" method="post" enctype="multipart/form-data" action="/upload">
//注意此处name="thumbnail",与step3中"files.thumbnail[0].fieldName;",thumbnail要一致
    <input type="file" id="file" name="thumbnail"/>
    <input type="submit"/>
</form>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery.form/4.2.2/jquery.form.min.js"></script>
<script>
//防止没有选择文件直接点击提交
    $('#formOne').bind('submit', function () {
        var fileValue = $('#file').val();
        if (!fileValue) {
            alert("请选择文件");
            return false;
        }
    })
</script>
</body>
</html>

到此已经全部完成,在Terminal中输入node app.js即可启动服务器,上传的文件在uploads文件夹中

Github 源码

https://github.com/SevenTrap/upload

相关文章

网友评论

    本文标题:node + express4 + multiparty 实现文

    本文链接:https://www.haomeiwen.com/subject/azggjxtx.html