当前位置:   article > 正文

SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传_springboot ajax 文件上传

springboot ajax 文件上传

前言

本文是一篇由前端发起JQuery+Ajax异步请求,传输表单和文件数据,后端控制器获取数据的文章。复制粘贴,亲测可用!

一、示例代码

(1)pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>springboot-jwt</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <parent>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-parent</artifactId>
  12. <version>2.2.5.RELEASE</version>
  13. <relativePath/>
  14. </parent>
  15. <dependencies>
  16. <!-- SpringMVC -->
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-web</artifactId>
  20. </dependency>
  21. <!-- / SpringMVC -->
  22. <!-- Spring Boot Mybatis -->
  23. <!-- <dependency>
  24. <groupId>org.mybatis.spring.boot</groupId>
  25. <artifactId>mybatis-spring-boot-starter</artifactId>
  26. <version>1.2.0</version>
  27. </dependency> -->
  28. <!-- / Spring Boot Mybatis -->
  29. <!-- MySQL 连接驱动依赖 -->
  30. <!--<dependency>
  31. <groupId>mysql</groupId>
  32. <artifactId>mysql-connector-java</artifactId>
  33. <version>5.1.39</version>
  34. </dependency>-->
  35. <!-- / MySQL 连接驱动依赖 -->
  36. <!-- MSSQL 连接驱动依赖 -->
  37. <!-- <dependency>
  38. <groupId>com.microsoft.sqlserver</groupId>
  39. <artifactId>mssql-jdbc</artifactId>
  40. <scope>runtime</scope>
  41. </dependency> -->
  42. <!-- / MSSQL 连接驱动依赖 -->
  43. <!-- java-jwt -->
  44. <!-- <dependency>
  45. <groupId>com.auth0</groupId>
  46. <artifactId>java-jwt</artifactId>
  47. <version>3.8.1</version>
  48. </dependency> -->
  49. <!-- / java-jwt -->
  50. <!-- jjwt -->
  51. <!-- <dependency>
  52. <groupId>io.jsonwebtoken</groupId>
  53. <artifactId>jjwt</artifactId>
  54. <version>0.9.1</version>
  55. </dependency> -->
  56. <!-- / jjwt -->
  57. <!-- lombok -->
  58. <!-- <dependency>
  59. <groupId>org.projectlombok</groupId>
  60. <artifactId>lombok</artifactId>
  61. </dependency> -->
  62. <!-- / lombok -->
  63. <!-- fastjson -->
  64. <dependency>
  65. <groupId>com.alibaba</groupId>
  66. <artifactId>fastjson</artifactId>
  67. <version>1.1.41</version>
  68. </dependency>
  69. <!-- thymeleaf前端模板赋值框架 -->
  70. <dependency>
  71. <groupId>org.springframework.boot</groupId>
  72. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  73. </dependency>
  74. <!-- / thymeleaf前端模板赋值框架 -->
  75. <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
  76. <dependency>
  77. <groupId>commons-fileupload</groupId>
  78. <artifactId>commons-fileupload</artifactId>
  79. <version>1.3.1</version>
  80. </dependency>
  81. <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
  82. <dependency>
  83. <groupId>commons-io</groupId>
  84. <artifactId>commons-io</artifactId>
  85. <version>2.4</version>
  86. </dependency>
  87. </dependencies>
  88. </project>

(2)App.java

  1. import org.mybatis.spring.annotation.MapperScan;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @MapperScan("com.zhiquan.mapper")
  5. @SpringBootApplication
  6. public class App {
  7. public static void main(String[] args) {
  8. SpringApplication.run(App.class,args);
  9. }
  10. }

(3)ResourceConfig.java

  1. package com.zhiquan.config;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  4. import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
  5. @Configuration
  6. public class ResourceConfig extends WebMvcConfigurationSupport {
  7. /**
  8. * 配置静态访问资源,在resources目录新建static子目录,所有静态文件如:css、js、font等存于此
  9. * @param registry
  10. */
  11. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  12. registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
  13. }
  14. }

(4)application.yml

  1. server:
  2. port: 8088
  3. spring:
  4. thymeleaf:
  5. prefix:
  6. classpath: /templates # 访问templates下的html文件需要配置模板映射,在resources目录新建templates子目录以及xxx等子目录,然后创建html,如:resources/templates/xxx/yyy.html
  7. cache: false # 开发时关闭缓存,不然没法看到实时页面
  8. datasource:
  9. # url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
  10. # driverClassName: com.mysql.jdbc.Driver
  11. # username: root
  12. # password:
  13. url: jdbc:sqlserver://99.99.99.99:1433;databaseName=AIOWFILE
  14. username: root
  15. password:
  16. servlet:
  17. multipart:
  18. max-file-size: 5MB #设置单个文件的最大值
  19. max-request-size: 15MB #设置单次请求的所有文件的最大值

(5)uploadSingleFile.html(单文件上传)

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <script src="/static/js/jquery.min.js"></script>
  7. </head>
  8. <body>
  9. <p>单文件上传</p>
  10. <p><input id="cert" type="file" /></p>
  11. <p><input type="button" value="上传" onclick="submit();" /></p>
  12. </body>
  13. <script>
  14. function submit(){
  15. var formData = new FormData();
  16. formData.append("file", $("#cert")[0].files[0]);
  17. console.log(formData);
  18. $.ajax({
  19. type: "POST",
  20. url: '/uploadSingleFile',
  21. data: formData,
  22. processData: false,
  23. contentType: false,
  24. success: function (data) {
  25. alert(data);
  26. }
  27. });
  28. }
  29. </script>
  30. </html>

(6)uploadMultiFile.html(多文件上传 + 表单内容)

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <script src="/static/js/jquery.min.js"></script>
  7. </head>
  8. <body>
  9. <p>多文件上传 + 表单内容</p>
  10. <p><input id="cert" type="file" /></p>
  11. <p><input id="attachment1" type="file" /></p>
  12. <p><input id="attachment2" type="file" /></p>
  13. <p><input id="token" type="hidden" value="ka8912kas62ghk236a5adh32s0923lsd"/></p>
  14. <p><input id="title" type="text" placeholder="标题"/></p>
  15. <p><input id="content" type="text" placeholder="内容"/></p>
  16. <p><input type="button" value="上传" onclick="submit();" /></p>
  17. </body>
  18. <script>
  19. function submit(){
  20. var formData = new FormData();
  21. formData.append("file", $("#cert")[0].files[0]);
  22. formData.append("file", $("#attachment1")[0].files[0]);
  23. formData.append("file", $("#attachment2")[0].files[0]);
  24. formData.append("text", $("#title").val());
  25. formData.append("text", $("#content").val());
  26. formData.append("hidden", $("#token").val());
  27. console.log(formData);
  28. $.ajax({
  29. type: "POST",
  30. url: '/uploadMultiFile',
  31. data: formData,
  32. dataType: 'json',
  33. processData: false,
  34. contentType: false,
  35. success: function (data) {
  36. console.log(data.msg);
  37. alert(data.msg);
  38. },
  39. error: function (e) {
  40. console.log(e);
  41. alert(e);
  42. }
  43. });
  44. }
  45. </script>
  46. </html>

(7)UserController.java

  1. package com.zhiquan.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.zhiquan.entity.CommonFile;
  4. import com.zhiquan.entity.User;
  5. import com.zhiquan.service.UserService;
  6. import com.zhiquan.utils.JwtUtils;
  7. import com.zhiquan.vo.Msg;
  8. import com.zhiquan.vo.TokenVo;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.*;
  12. import org.springframework.web.multipart.MultipartFile;
  13. import java.io.File;
  14. import java.io.FileOutputStream;
  15. import java.sql.Timestamp;
  16. import java.util.Date;
  17. import java.util.Map;
  18. import java.util.UUID;
  19. @Controller
  20. public class UserController {
  21. @Autowired
  22. private UserService UserService;
  23. /**
  24. * 单文件上传页面
  25. * @return
  26. */
  27. @GetMapping(value = "/uploadSingleFile")
  28. public String uploadSingleFile(){
  29. return "/home/uploadSingleFile";
  30. }
  31. /**
  32. * 多文件上传页面
  33. */
  34. @GetMapping(value = "/uploadMultiFile")
  35. public String uploadMultiFile(){
  36. return "/home/uploadMultiFile";
  37. }
  38. /**
  39. * 单文件上传处理
  40. */
  41. @PostMapping(value = "/uploadSingleFile")
  42. @ResponseBody
  43. public String uploadSingleFile(@RequestParam("file") MultipartFile file) {
  44. // 文件处理
  45. String fileName = file.getOriginalFilename();
  46. String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1,fileName.length());
  47. //String filePath = "src/main/resources/static/files/";
  48. String filePath = "D:\\UploadedFile\\";
  49. File targetFile = new File(filePath);
  50. if(!targetFile.exists()) {
  51. targetFile.mkdirs();
  52. }
  53. try {
  54. Timestamp ts1 = new Timestamp((new Date("2020/09/16 17:18:42")).getTime());
  55. Timestamp ts2 = new Timestamp((new Date()).getTime());
  56. CommonFile commonFile = new CommonFile();
  57. commonFile.setSubPath("/20200916-171842-123456");
  58. commonFile.setFileName(file.getOriginalFilename());
  59. commonFile.setFileExtension(fileExtension);
  60. commonFile.setCreationTime(ts1);
  61. commonFile.setModificationTime(ts2);
  62. commonFile.setAppendix("NULL");
  63. commonFile.setFileSize((int) file.getSize());
  64. commonFile.setFileImage(file.getBytes());
  65. System.out.println(commonFile);
  66. // 文件存入数据库
  67. try {
  68. UserService.saveCommonFile(commonFile);
  69. System.out.println("文件存入MSSQL数据库成功!");
  70. } catch (Exception e){
  71. System.out.println("文件存入失败!");
  72. }
  73. // 文件存到服务器
  74. try {
  75. FileOutputStream out = null;
  76. out = new FileOutputStream(filePath + fileName);
  77. out.write(file.getBytes());
  78. out.flush();
  79. out.close();
  80. System.out.println("文件写入成功!");
  81. } catch (Exception e){
  82. System.out.println("文件写入失败!");
  83. }
  84. return "ok";
  85. } catch (Exception e) {
  86. return "no";
  87. }
  88. }
  89. /**
  90. * 多文件上传处理
  91. */
  92. @PostMapping(value = "/uploadMultiFile")
  93. @ResponseBody
  94. public JSONObject uploadMultiFile(@RequestParam("file") MultipartFile[] files,@RequestParam("text") String text,@RequestParam("hidden") String token) {
  95. System.out.println(text);
  96. System.out.println(token);
  97. JSONObject jsonObject = new JSONObject();
  98. try{
  99. if (files.length > 0){
  100. for (MultipartFile file:files) {
  101. System.out.println(file.getOriginalFilename());
  102. // 文件处理
  103. String fileName = file.getOriginalFilename();
  104. String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1,fileName.length());
  105. String filePath = "D:\\UploadedFile\\";
  106. File targetFile = new File(filePath);
  107. if(!targetFile.exists()) {
  108. targetFile.mkdirs();
  109. }
  110. // 文件存到服务器
  111. try {
  112. FileOutputStream out = null;
  113. out = new FileOutputStream(filePath + fileName);
  114. out.write(file.getBytes());
  115. out.flush();
  116. out.close();
  117. System.out.println("文件写入成功!");
  118. } catch (Exception e){
  119. System.out.println("文件写入失败!");
  120. }
  121. }
  122. }
  123. jsonObject.put("msg","ok");
  124. }catch (Exception e){
  125. jsonObject.put("msg","no");
  126. }
  127. return jsonObject;
  128. }
  129. }

二、运行结果 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/652150
推荐阅读
相关标签
  

闽ICP备14008679号