文件上传node和java对比

之前在写网站的时候,同学介绍说node文件上传功能要比java快,于是我就尝试用node里面的formidable模块写上传功能模块。
哎结果真的是坑死我了,由于用的是vue-cli脚手架在我把项目打包完成发现文件上传功能用不了,后来突然明白文件上传是后端干的事,而vue-cli打包完后就成了静态资源,没有node运行的环境。
解决办法是在服务器上安装node环境,然后单独运行文件上传这个模块。
由于我的后端用java写的没办法只能用java再写一个文件上传功能,不过最后发现java文件上传要比node快性能更好。
单从java强类型语言就比node弱类型语言快好多,
java一次能上传150MB大小的文件 ,node好像是100MB左右

以下是我封装好的node文件上传代码

注意要先安装 formidable模块

vue中运行的话需要安装 concurrently 模块,然后修改package.json文件在script中添加
"start": "concurrently \"vue-cli-service serve\" \" node server.js\"", node后面是文件相对路径

在这里插入图片描述

//创建网站服务器
const http = require("http");
//创建服务器对象
const path = require('path');
const formidable = require('formidable');
const url = require('url');
const fs = require("fs");

let app = http.createServer((req, res) => {
     
    let {
     pathname} = url.parse(req.url);

    console.log(req.method, pathname);

    // 创建表单解析对象
    const form = new formidable.IncomingForm();

    //删除文件   对文件操作只能由服务器端来完成
    if (pathname == "/upload/delete" && req.method === 'POST') {
     
        form.parse(req, (err, fields, files) => {
     
            let path = fields.filename;
            if (fs.statSync(path).isFile()) {
     
                try {
     
                    fs.unlinkSync(fields.filename)
                } catch (e) {
     
                    return e;
                }
            }
            res.end()
        });

    }

    if (pathname == "/upload/images" || pathname == "/upload/data" && req.method === 'POST') {
     

        // 设置文件上传的位置
        form.uploadDir = path.join(__dirname, "../../../", "/uploads/images");
        // 保留传文件的后缀
        form.keepExtensions = true;
        //设置为多文件上传
        // form.multiples = true;
        //上传文件的最大大小
        form.maxFieldsSize = 60 * 1024 * 1024;
        // 解析表单
        form.parse(req, (err, fields, files) => {
     
            // err错误处理对象
            // fields 对象类型 保留普通表单数据
            // files对象类型 保存了和上传文件相关的数据

            let filename = files.uploadFile.path.substring(0, files.uploadFile.path.lastIndexOf("\\") + 1) + files.uploadFile.name;

            fs.renameSync(files.uploadFile.path, filename);
            //向浏览器返回文件存储路径
            res.write(filename)
            res.end()

        })
    }
});


app.listen(3001, () => {
     
    console.log('文件上传功能代码块启动成功');
})

PS : 如何在vue中使用json-server 使其能被跨域访问

安装json-server模块

在这里插入图片描述

你可能感兴趣的:(node宝典)