美文网首页PHP知识
Nodejs 文件上传

Nodejs 文件上传

作者: _不能说的秘密i | 来源:发表于2018-09-11 21:11 被阅读16次

    node js 接收表单数据原理

    /**
     * node js 接收表单数据
     */
    const http = require("http");
    const qs   = require("querystring");
    
    http.createServer((request, response) => {
        // 表单提交的原理
        if (request.url === "/post" && request.method.toLowerCase() === "post") {
            // 1. 设置接收的变量
            let formData = "";
    
            // 2. 接收小段数据
            request.on("data", buf => {
                formData += buf;
            });
    
            // 3. 监听所有数据传递完毕事件
            request.once("end", () => {
                formData = qs.parse(formData);
                console.log(formData); // object
                console.log("数据接收完成");
            });
        }
    }).listen(3000);
    

    使用 formidable 上传文件

    /**
     * 使用formidable上传图片
     */
    const http = require("http");
    const fs   = require("fs");
    const formidable = require("formidable");
    const uuidv1 = require("uuid/v1");
    const path = require("path");
    
    http.createServer((request, response) => {
        if (request.url == "/") {
            fs.readFile(__dirname+"/index.html", (err, data)=>{
                if (err) {throw err;}
                response.setHeader("content-type", "text/html;charset=utf8;");
                response.end(data.toString());
            });
        }
    
        if (request.url === "/post" && request.method.toLowerCase() === "post") {
            // 1.实例化对象
            const form = new formidable();
            // 2.设置文件上传的路径, 默认就会自动上传到这个目录中,这个目录必须要存在,否则报错, 不建议使用相对路径
            form.uploadDir = __dirname + '/uploads';
    
    
            // 3.获取表单内容
            form.parse(request, (err, fields, files)=> {
                /****************** 利用formidable的文件名
                // 3.1 获取原文件名
                let ext     = path.extname(files.file.name);
                // 3.2 获取上传文件的路径
                let oldPath = files.file.path;
                // 3.3 拼接新路径
                let newPath = oldPath + ext;
                console.log(newPath);
                // 3.4 修改文件名
       
                或者使用 uuid 这个包, 二选一
                ************************************/
                // 3.1 获取独一无二的一个字符串 uuid 
                let uuid = uuidv1();
                // 3.2 获取上传文件的后缀
                let ext = path.extname(files.file.name);
                // 3.3 获取路径
                let oldPath = files.file.path;
                let newPath = __dirname + "/uploads/" + uuid + ext;
                // 3.4 修改文件名
                
                fs.rename(oldPath, newPath, err=>{
                    if (err) throw err;
                    response.end("文件上传成功");
                });
                response.end("images");
            });
        }
        // response.end("404");
    }).listen(3000);
    

    相关文章

      网友评论

        本文标题:Nodejs 文件上传

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