zoukankan      html  css  js  c++  java
  • vue+jquery使用FormData向后端传递数据和文件,express如何获取

    使用multiparty 模块

    下载 cnpm install multiparty --save

    前端代码:

    <template>
      <div class="add-area">
        <Dialog :msg="msg" :tagClass="tagClass" v-show="dialogHidden"></Dialog>
        <div class="top-area">
          <span class="iconfont icon-close" @click="close"></span>
        </div>
        <div class="main-area">
          <!-- <form method="post" name="fileinfo" enctype="multipart/form-data" action="http://localhost:3000/add"> -->
            <table align="center">
              <tr>
                <td>简讯标题:</td>
                <td><input type="text" style=" 700px;  height: 24px;" id="title" name="title" required="required"></td>
              </tr>
              <tr>
                <td>简讯来源:</td>
                <td><input type="text" style=" 700px;  height: 24px;" id="source" name="source" required="required"></td>
              </tr>
              <tr>
                <td>简讯作者:</td>
                <td><input type="text" style=" 700px; height: 24px;" id="author" name="author" required="required"></td>
              </tr>
              <tr>
                <td>简讯内容:</td>
                <td><textarea name="content" id="content" cols="30" rows="10" style=" 700px;" required="required" ></textarea></td>
              </tr>
              <tr>
                <td>上传图片:</td>
                <td><input type="file"
                          name="file"
                          id="file"
                          accept="image/gif,image/jpeg,image/jpg,image/png,image/svg"
                          required="required"
                          @change="uploading($event)"></td>
              </tr>
              <tr>
                <td colspan="2" style="text-align: center;"><input type="button" class="like-btn" value="添加文章" @click="addArticle()"/></td>
              </tr>
            </table>
          <!-- </form> -->
        </div>
      </div>
    </template>
    
    <script>
      import Dialog from "../components/dialog.vue"
      export default{
        name:"Add",
        components:{
          Dialog
        },
        data(){
          return{
            msg:"出错了",
            tagClass:"error",
            dialogHidden:false,
            // 表单中的数据定义
            file:"",
            src:""
          }
        },
        methods:{
          countTime(){
            setTimeout(()=>{
              this.dialogHidden=false
            },2000)
          },
          close(){
            this.$router.go(-1)
          },
          uploading(event){
            this.file = event.target.files[0];//获取文件
            var windowURL = window.URL || window.webkitURL;
            this.file = event.target.files[0];
            console.log(this.file)
             //创建图片文件的url
            this.src = windowURL.createObjectURL(event.target.files[0]);
            console.log(this.src)
          },
          addArticle(){
            // var form=new FormData(document.forms.namedItem("fileinfo"))
             event.preventDefault();
            let title=$.trim($("#title").val())
            let source=$.trim($("#source").val())
            let author=$.trim($("#author").val())
            let content=$.trim($("#content").val())
            let file=$.trim($("#file").val())
            console.log(content)
            console.log("文件内容:",file)
            console.log(file=="")
            console.log($("#file").get(0).files[0])
            if(title.length<1){
              this.dialogHidden=true
              this.countTime()
              this.msg="请输入简讯标题"
              this.tagClass="error"
              return false;
            }
            if(source.length<1){
              this.dialogHidden=true
              this.countTime()
              this.msg="请输入简讯来源"
              this.tagClass="error"
              return false;
            }
            if(author.length<1){
              this.dialogHidden=true
              this.countTime()
              this.msg="请输入作者名称"
              this.tagClass="error"
              return;
            }
            if(content.length<1){
              this.dialogHidden=true
              this.countTime()
              this.msg="请输入简讯内容"
              this.tagClass="error"
              return;
            }
            if(file == "" || file.length<1){
              this.dialogHidden=true
              this.countTime()
              this.msg="请选择图片文件"
              this.tagClass="error"
              return;
            }
            // var form = document.forms.namedItem("fileinfo");
            console.log("越过山川")
            var formData = new FormData();
            console.log("formData:",formData)
            console.log(title)
             formData.append('title',title)
             formData.append('source',source)
             formData.append('author',author)
             formData.append('content',content)
             formData.append('file',this.file)
             console.log(formData)//直接输出formData结果是{},可以以下面这种方式查看
             console.log(formData.get("title"));
             console.log(formData.get("file"));
             $.ajax({
               url: "http://localhost:3000/add" ,
               data:formData,
               type:"POST",
               contentType:false,
               processData:false,
               success:res=>{
                 console.log(res)
               },
               error:err=>{
                 console.log(err)
               }
             })
    
    
          }
        }
      }
    </script>

    express代码:

    const express=require("express");
    const app=express();
    const path=require("path")
    const fs=require("fs")
    const multiparty=require("multiparty")
    
    
    const cors=require("cors")
    app.use(cors())
    
    // 定义静态资源目录
    app.use("/static",express.static(path.join(__dirname,"./public")))
    
    app.listen(3000,()=>{
        console.log("app start!")
    })
    
    
    
    // 获取添加简讯的数据
    app.post("/add",(req,res)=>{
          let form = new multiparty.Form({uploadDir:"./public"});
            form.parse(req,(err,fields,files)=>{
                if(err){
                    console.log("出错了",err)
                    res.send({
                        code:400,
                        msg:"简讯添加失败"
                    })
                }else{
                    let inputFile =files.file[0]
                    var uploadPath=inputFile.path;
                    console.log("文件路径",uploadPath)
                    console.log(typeof uploadPath)
                    var arrPath=uploadPath.split("\")[1]
                    let dstPath="./public/"+arrPath
                    fs.rename(uploadPath,dstPath,(err)=>{
                        if(err){
                            res.send({
                                code:400,
                                msg:"简讯添加失败"
                            })
                        }
                        // 文章图片地址
                        let newPath="http://localhost:3000/static/"+arrPath
                        let time=new Date().getTime()
                        // 文章其他信息
                        let addData={
                            title:fields.title[0],
                            source:fields.source[0],
                            author:fields.author[0],
                            content:fields.content[0],
                            articleImg:newPath,
                            create_time:time,
                            love:0,
                            discuss:0,
                            sharea:0
                        }
                        randomArt.create(addData,(err,data)=>{
                            if(err){
                                res.send({
                                    code:400,
                                    msg:"添加简讯失败"
                                })
                            }else{
                                console.log("添加的数据结果:",data)
                                res.send({
                                    code:200,
                                    msg:"添加简讯成功"
                                })
                            }
                        })
                    })
                }
            })
    })

    mongoose连接文件:dbConn.js代码:

    // 连接数据库
    const mongoose=require("mongoose");
    
    mongoose.connect("mongodb://localhost:27017/blog",{useNewUrlParser:true},(err)=>{
        if(err){
            console.log(err)
            return;
        }
        console.log("数据库连接成功")
    })
    
    module.exports=mongoose;

    模型randomArt.js文件代码:

    const mongoose =require("./dbConn.js")
    
    const articleSchema=mongoose.Schema({
        title:String,
        source:String,
        author:String,
        articleImg:String,
        content:String,
        love:{
            type:Number,
            default:0
        },
        share:{
            type:Number,
            default:0
        },
        discuss:{
            type:Number,
            default:0
        },
        create_time:{
            type:Date,
            default:Date.now()
        }
    })
    module.exports=mongoose.model("randomArt",articleSchema)
  • 相关阅读:
    JBoss目录结构说明
    Velocity简介
    如何把文件上传到另外一台服务器
    控制GridView列显示
    CheckBoxList取值及勾选上
    Email发送中不允许使用邮箱名称原因
    关于URL重写的一点心得
    修改数据库所有者
    验证CheckBoxList至少要有一项选中
    SQL中字符串处理(分割及反分割)
  • 原文地址:https://www.cnblogs.com/shanchui/p/13043414.html
Copyright © 2011-2022 走看看