zoukankan      html  css  js  c++  java
  • node进阶| 解决表单enctype="multipart/form-data" 时获取不到Input值的问题

    今天在学习node踩到一个坑:form设置enctype="multipart/form-data"上传文件时,无法获取到表单其他input的值。

    因为之前上传文件用的是 formidable 

    方法1:formidable (无法获取其他input的值)

    引包 app.js

    var app = express();
    var express = require("express");
    var router = require("./controller"); //前端MVC的C 一个顶层变量

     

    controller/package.json

    {
        "main" :"router.js"
    }

    POST请求 app.js:

    app.post("/file_upload",router.uploadfile);

    controller/router:

    exports.uploadfile=function(req,res){
             // console.log(req.route);
        var form = new formidable.IncomingForm();
            form.encoding = 'utf-8';  
            form.uploadDir = "./uploads"; //上传路径
              form.parse(req, function(err, fields, files) { // 表单上传到东西在fields 文件在files里面
                  //更改文件名
              var timeStr = (Math.floor(Math.random()*9000+1000)).toString();
              var d = sd.format(new Date(),'YYYYMMDDHHmmss'+timeStr);
              var folder = fields.folder;
              var extname = path.extname(files.file.name); //文件类型
              var oldName = files.file.path;
              var newName = "./public/image/"+folder+"/"+d + extname;
              console.log(newName);
              console.log(folder);
              fs.rename(oldName,newName);
              //成功页
              res.send("<a href = '/'>返回</a>");
    
            });
    
    }

    views/up.ejs

    <form style="40%;" method="post" action="/file_upload" enctype="multipart/form-data">
       <input type="file" id="exampleInputFile"  name="file">
      <input type="submit" class="btn btn-default">上传</input>
    </form>

    但是这种方法无法获取到form表单其他input的值

    方法2:multer(可以获取)

    引包 app.js

    var express = require('express');
    var path = require('path');
    var index = require('./routes/index');
    var fs = require('fs');
    var multer = require('multer');

    app.js

    app.use('/', index);
    var storage = multer.diskStorage({
         
           destination: function (req, file, cb) {
                cb(null, './uploads')  //设定文件上传路径
           }, 
         //给上传文件重命名,获取添加后缀名
          filename: function (req, file, cb) {
              console.log(file.originalname) //上传文件的名字
              console.log(file.mimetype)    //上传文件的类型
              console.log(file.fieldname) // 上传文件的Input的name名
              console.log(file.encoding)    // 编码方式
             var fileFormat = (file.originalname).split("."); //采用分割字符串,来获取文件类型
            console.log(fileFormat)
            var extname = path.extname(file.originalname); //path下自带方法去获取文件类型
            console.log(extname);
              // cb(null, file.fieldname + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1]); //更改名字
              cb(null, file.fieldname + '-' + Date.now() +  extname); //更改名字
          }
     });
    var upload = multer ({storage:storage}) //定制化上传参数
    app.post('/upload', upload.array('logo',2), function(req, res, next){
        console.log(req.body.txt)
        res.send({ret_code: '0'});
    });

    views/index.ejs

        <form action="/upload" method="post" enctype="multipart/form-data">
            <h2>单图上传</h2>
            <input type="file" name="logo">
            <input type="file" name="logo">
            <input type="text" name="txt">
            <input type="submit" value="提交">
        </form>

     

    multer包成功解决了无法获取到表单其他input的值的问题。

  • 相关阅读:
    mysql 双主高可用配置
    lsyncd实时同步搭建指南
    tomcat优化
    nginx + tomcat + https配置
    supervisor安装文档
    移动设备的分辨率
    Python零基础入门(13)-------语句与流程控制
    Python零基础入门(12)-------文件读写
    Python零基础入门(11)-------dict 字典表
    Python零基础入门(10)------- str 字符串
  • 原文地址:https://www.cnblogs.com/dirkhe/p/7354886.html
Copyright © 2011-2022 走看看