Vue+axios+Servlet 中提交表单数据(含上传图片)超详版!!!

1.HTML页面

这里用post方法传送,大小不受限制;还用了v-model的双向绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<link href="../css/bootstrap.css" type="text/css" rel="stylesheet">
		<link rel="stylesheet" href="../css/component.css">
		<link rel="stylesheet" href="../css/admin.css">
		<link rel="stylesheet" href="../css/font-awesome.min.css">
		<link rel="stylesheet" href="../css/bootstrap.css">
		<script type="text/javascript" src="../js/vue.js"></script>
        <script type="text/javascript" src="../js/axios.min.js"></script>
        <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
		<style>
			.tablestyle{
				padding: 20px;
				width: 400px;

			}
			.tablestyle th{
				text-align:left;
			}
			.tablestyle td{
				text-align:left;
			}
		</style>
	</head>
	<body>
		<div class="rbody" id="app">
		<div class="top">
		            当前位置:案例管理<i class="fa fa-fw fa-angle-right"></i>添加案例
		</div>
		</div>
		<div class="tablestyle">
		<form action="" method="post" enctype="multipart/form-data">
			<table border="1px" style="border-collapse: collapse" class="table table-bordered">
				<tr>
					<td>标题</td>
					<td>
						<input type="text" class="form-control" id="tsutitle" placeholder="标题" v-model="tstitle">
					</td>
				</tr>
				<tr>
					<td>内容</td>
					<td>
						<textarea class="form-control" rows="6" placeholder="请输入内容" v-model="tscontent"></textarea>
					</td>
				</tr>
				<tr>
					<td>图片</td>
					<td>
						<input type="file" name="logoImage" @change="getFile($event)"/>
					</td>
				</tr>
				<tr>
					<td align="center">
						<input class="btn btn-default" type="submit" value="提交" @click="submitForm($event)"/>
					</td>
					<td align="left">
						<input class="btn btn-default" type="reset" value="重置" @click="cz();"/>
					</td>
				</tr>
			</table>
		</form>
		</div>
	<script>
		var add=new Vue({
			el:‘.tablestyle‘,//作用域
			data:{
				tstitle:‘‘,//数据
				tscontent:‘‘,
				file:‘‘
			},
			methods:{
				cz:function(){
					add.tstitle="";
					add.tscontent="";
				},
				getFile(event) {
					this.file = event.target.files[0];
                    //console.log(this.file);
                    alert("上传");
                },
                submitForm(event) {
                	//event.preventDefault();

                	let formData = new FormData();
                    formData.append(‘tstitle‘, this.tstitle);
                    formData.append(‘tscontent‘, this.tscontent);
                    formData.append(‘file‘, this.file);

                    let config = {
                            headers: {
                              ‘Content-Type‘: ‘multipart/form-data‘
                            }
                        };
                    //servlet名字为uploadfile
                    axios.post("../uploadfile",formData,config).then((res)=>{
                    	alert("添加成功!");
                        // success callback
                    }).catch((err)=>{
                    	alert("添加失败!");
                    });
			    }
			}
		});

		</script>
	</body>
</html>

2.Servlet

package com.web.admin;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.service.admin.AdminTsuService;

/**
 * Servlet implementation class Uploadfile
 */
@WebServlet("/uploadfile")
public class Uploadfile extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Uploadfile() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //response.getWriter().append("Served at: ").append(request.getContextPath());

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      doGet(request, response);
      //设置编码方式
      request.setCharacterEncoding("utf-8");
      response.setCharacterEncoding("gb2312");

      //设置输出
      PrintWriter outprint = response.getWriter();
      //Enumeration files = multipartRequest.getFileNames();
      //设置文件目录
      String webroot = this.getServletContext().getRealPath("/");
      File temppath = new File(webroot + "fileuploadtemp");
      String dir = webroot+ File.separator + "upload";
      File path = new File(webroot+ File.separator + "upload");
      if (!temppath.exists()) {
          temppath.mkdirs();
      }
      if (!path.exists()) {
          path.mkdirs();
      }

      //设置文件类型(可加)
      String[] type= new String[]{".jpg",".png",".jpeg",".gif",".bmp"};

      //创建文件项工厂
      DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 1024,temppath);
      ServletFileUpload upload = new ServletFileUpload(factory);
      upload.setFileSizeMax(1024 * 1024 * 10);
      try {
          List<FileItem> fileItems = upload.parseRequest(request);
          Iterator<FileItem> it = fileItems.iterator();
          String newFimeName=null;
          String tstitle1=null;
          String tscontent1=null;
          //String tstitle2=null;
          //String tscontent2=null;
          //String name1 = "tstitle";
          //String content1 = "tscontent";
          // int count = 0;

          //遍历request file
          while (it.hasNext()) {
              FileItem fi = it.next();

              //判断该表单是否为普通表单类型
              if (fi.isFormField()) {
                  String nameString = fi.getFieldName();
                  switch(nameString)
                  {
                     case "tstitle" :
                        //解决转换字节流乱码问题
                        tstitle1 =  new String(fi.getString().getBytes("ISO8859_1"),"utf-8");

                        System.out.println(tstitle1);
                        break;
                     case "tscontent" :
                         tscontent1 =  new String(fi.getString().getBytes("ISO8859_1"),"utf-8");
                         System.out.println(tscontent1);
                         break;
                     default :
                        System.out.println("未知等级");

                }

                  //System.out.println("----"+nameString+"-------");
                  //System.out.println("----"+conString+"-------");
              } else {
                  InputStream in = fi.getInputStream();
                  String name = fi.getName();//获得文件原名

                  //得到文件后缀名
                  int index = name.lastIndexOf(".");
                  String endWith = name.substring(index);

                  //判断是否符合类型
                  boolean TypeExists = Arrays.asList(type).contains(endWith);
                  if (!TypeExists) {
                      outprint.print("<script>\n" +
                              "alert(\"文件类型错误,只允许jpg,png,jpeg,gif\");location=\"fileup.html\";\n" +
                              "</script>");
                      return;
                      }

                      newFimeName = System.currentTimeMillis() + endWith;//新文件名

                      //创建上传文件
                      FileOutputStream out = new FileOutputStream(new File(
                              dir + "/" + newFimeName));

                      byte buffer[] = new byte[1024];
                      int len = 0;
                      while ((len = in.read(buffer)) > 0) {
                          out.write(buffer, 0, len);//写入大小
                      }

                      in.close();
                      out.close();
                      fi.delete();

                    //  outprint.print("上传成功");
                  }
              }

          AdminTsuService tsuService = new AdminTsuService();
          String tsu=tsuService.addone(tstitle1, tscontent1,newFimeName);//调用service层方法
          outprint.println(tsu);
          outprint.flush();//清除缓冲区的数据
          outprint.close();//关闭流
          } catch(FileUploadException e){
              response.getWriter().write(e.toString());
          }
    }
}

3.service层

    public String addone(String tstitle,String tscontent,String tspicture) {
        int add=tsu.addone(tstitle, tscontent,tspicture);
        return JSON.toJSON(add).toString();
    }

4.dao层

    public int addone(String tstitle,String tscontent,String tspicture) {
        String sql="insert into tsu(tstitle,tscontent,tspicture) values (?,?,?)";
        int i = DH.update(sql, new String[] {tstitle,tscontent,tspicture});
        return i;
    }

5.数据库

原文地址:https://www.cnblogs.com/zuojiachen/p/12305491.html

时间: 2024-10-06 07:49:46

Vue+axios+Servlet 中提交表单数据(含上传图片)超详版!!!的相关文章

jsp提交表单数据乱码,内置对象,以及过滤器

jsp提交表单数据乱码解决方案 通过form表单给服务器提交数据的时候,如果提交的是中文数据,那么可能会出现乱码,如果表单的请求方式是post请求,那么可以使用如下方案解决乱码: 在调用getParameter()之前,设置请求对象request的编码方式. <% request.setCharacterEncoding("utf-8");%> 002.如果是通过get方式提交的form,两种处理乱码方案: 01.通过new String(str.getBytes(“iso

easyui提交表单数据的时候如何防止二次提交

在前端提交数据的时候有时候可能会由于网络延迟等原因,我们在等待的时候会多次点击保存按钮,这可能会导致我们一次输入的数据多次提交,导致数据重复.最近在做项目的时候碰到了这个问题,先说一点,这个问题的解决方案有很多种,有的在前端解决,有的方案在后端解决,个人觉得能够在前段解决的最好在前段就解决,而且拿java来说,如果在后端解决,在高并发的情况下还要考虑线程安全的问题.最近接触的项目的前端是easyui,在此把解决方案做下记录. 不论是easyui还是别的框架,总体的一个思路是:当我们点击保存按钮之

JSON编码格式提交表单数据详解

以JSON编码格式提交表单数据是HTML5对WEB发展进化的又一大贡献,以前我们的HTML表单数据是通过key-value方式传输的服务器端,这种形式的传输对数据组织缺乏管理,形式十分原始.而新出现的JSON格式提交表单数据方法,将表单里的所有数据转化的具有一定规范的JSON格式,然后传输的服务器端.服务器端接收到的数据是直接可以使用的合格JSON代码. 如何声明以JSON格式提交表单 大家应该对如何用表单上传一个文件的写法很熟悉,它需要在HTML中form标记上添加 enctype="mult

php中提交表单数据的POST()方法和GET()方法

提交获取表单数据是表单应用中最常用的操作,经常需要PHP后台从前台页面中获取用户在前台表单页面中提交的各种数据.表单数据传递的方式有以下的两种方法,一种为POST()方法,另外一种为GET()方法.具体采用哪种获取数据的方法是由<form>表单的 method 属性所指定的,下面讲解这两种方法在 Web 表单中的具体应用.大理石平台厂家 使用POST()方法提交表单 在使用POST()方法时,只需要将<form>表单中的属性 method 设置成POST即可. POST()方法不依

jquery ajax提交表单数据的两种方式

jquery ajax提交表单数据的两种方式

strus2中获取表单数据 两种方式 属性驱动 和模型驱动

strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值* 如果一个属性在对象栈,在页面上可以根据name属性进行回显*/ /** * 属性驱动实现的条件:* 1.当前请求的action在栈顶,所以action中的属性就暴漏出来了* 2.获取页面上表单的元素,整合成一个map * 3.调用setValue方法赋值*/ 1 package cn.itcast.struts2.sh; 2 3

利用socket模拟http的混合表单上传(在一个请求中提交表单并上传多个文件)

在很多企业级应用中,我们都没法直接通过开发语言sdk包封装的http工具来模拟http复合表单(multipart/form-data),特别是在跨语言跨平台的编程过程中,其实实现方案并不复杂,只要你了解了http协议中复合表单的报文结构就很简单了: httpheader ------时间戳------ 表单参数1 ------时间戳------ 表单参数2 ------时间戳------ 文件1的描述+二进制信息 ------时间戳------ 文件2的描述+二进制信息 下面我们进一步以一段c

axios异步提交表单数据的不同形式

踩坑Axios提交form表单几种格式 前后端分离的开发前后端, 前端使用的vue,后端的安全模块使用的SpringSecurity,使用postman测试后端的权限接口时发现都正常,但是使用vue+axios发送异步的请求后端一直获取不出axios提交的form表单的数据,爬坑两个半钟头找到了答案 axios用post异步形式提交的数据和我们直接使用from表单提交的数据的格式(Form Data格式)是不一样的,在下面列举 默认格式Request Payload 直接使用axios发送异步请

[asp.net mvc] 将视图中的表单数据传递到控制器中

在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送表单实现的.具体使用中,主要使用以下三种方法. 1.通过Request.Form读取表单数据 表单代码: 1 @using (Html.BeginForm("Person", "Default3")) 2 { 3 @Html.TextBox("tFirstName") 4 <br /> 5 @Html.TextBox("tLastName")