赞
踩
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
今日学习
主要的是文件的上传下载 和数据库连接池 还有几种日期格式处理等
- 同步上传 异步上传
- 单文件 多文件上传
- 正常上传 断点续传
- 上传到本项目 数据库 ftp服务 第三方服务
下载相同
由于上传文件的方式 get请求被认为不适合使用 尽量使用post
http默认协议头:传输的需要是字符串
表单的enctype必须是 multipart/form-data 浏览器就会采用二进制流来处理表单数据,服务器端就会 对文件上传的请求进行解析处理。
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码
’
jar包
<!--以下2个jar包用于文件上传-->
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileup
load -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<%-- Created by IntelliJ IDEA. User: 15836 Date: 2021/11/24 Time: 9:12 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script src="/resources/layui/layui.js"></script> <link rel="stylesheet" type="text/css" href="/resources/layui/css/layui.css"/> </head> <body> <form method="post" enctype="multipart/form-data" action="/file/upload"> <input type="file" name="filName"> <input type="submit"> </form> </body> </html>
SpringMVC 有提供的 MultipartFile 可以吧 传到的对象自动封装到 file里面
package com.controller.file; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.xml.crypto.Data; import java.io.File; import java.io.IOException; import java.util.Date; /** * @author zhangyifan * @version 8.0 * @description: * @date 2021/11/24 9:14 */ @Controller @RequestMapping("/file") public class FileController { /* Spring MVC 可以自动将传过来的文件流 封装到 multipartFile对象中*/ @RequestMapping("/upload") public String fileUpload(@RequestParam("filName") MultipartFile file, HttpServletRequest request){ String url=request.getServletContext().getRealPath("/upload");//绝对物理路劲 File aa=new File(url); if (aa.exists()){ aa.mkdirs(); } //为了避免文件重命名 为文件 + 时间戳 + 随机数 String orName=(new Date()).getTime()+file.getOriginalFilename(); File file1=new File(url+"/"+orName); //文件读写 文件 拷贝 try { file.transferTo(file1); } catch (IOException e) { e.printStackTrace(); } return "upload/upload"; } }
使用SpringMVC 提供的工具也需要在 xml中配置 CommonsMultipartResolver
Spring MVC通过MultipartResolver实现文件上传功能。MultipartResolver是一个
接口对象,需要通过它的实现类CommonsMultipartResolver来完成文件上传工作。
xml配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
<property name="maxUploadSize" value="524288000"></property>
</bean>
java配置
@Configuration
public class MultiClass {
@Bean(name = "multipartResolver")
public MultipartResolver getCommonsMultipartResolver() {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMulti
return commonsMultipartResolver;
}
}
<%--是 jsp的文件 Created by IntelliJ IDEA. User: 15836 Date: 2021/11/24 Time: 10:21 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form method="post" enctype="multipart/form-data" action="/file/uploadM"> <input type="file" name="filName"> <input type="file" name="filName"> <input type="file" name="filName"> <input type="file" name="filName"> <input type="file" name="filName"> <input type="submit"> </form> </body> </html>
控制层
@RequestMapping("/Moreupload")//这个时候接的就是数组的了 public String Moreupload(@RequestParam("filName") MultipartFile[] file, HttpServletRequest request){ String url=request.getServletContext().getRealPath("/upload");//绝对物理路劲 File aa=new File(url); if (aa.exists()){ aa.mkdirs(); //没有会自动创建 } for (MultipartFile file1:file){ //为了避免文件重命名 为文件 + 时间戳 + 随机数 String orName=(new Date()).getTime()+file1.getOriginalFilename(); File file2=new File(url+"/"+orName); //文件读写 文件 拷贝 try { file1.transferTo(file2); } catch (IOException e) { e.printStackTrace(); } } return "upload/upload"; }
**异步上传 和 **
控制层
@RequestMapping("/ajaxUpload") @ResponseBody public LayUIEntity ajaxfileUpload(@RequestParam("filName") MultipartFile file, HttpServletRequest request){ String url=request.getServletContext().getRealPath("/upload");//绝对物理路劲 File aa=new File(url); if (aa.exists()){ aa.mkdirs(); } //为了避免文件重命名 为文件 + 时间戳 + 随机数 String orName=(new Date()).getTime()+file.getOriginalFilename(); File file1=new File(url+"/"+orName); System.out.println(orName+"===="+url); //文件读写 文件 拷贝 try { file.transferTo(file1); } catch (IOException e) { e.printStackTrace(); } /* fileUrl=file1;*/ return new LayUIEntity(0,"成功",file1); }
前端
<%-- jsp文件 本身是 =============================注意注意 为了显示好看 Created by IntelliJ IDEA. User: 15836 Date: 2021/11/24 Time: 10:42 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script src="/resources/jquery-3.5.0.min.js"/> <script src="/resources/layui/layui.js"></script> <link rel="stylesheet" type="text/css" href="/resources/layui/css/layui.css"/> </head> <body> <!--请求方式为post才可以传输流 enctype="multipart/form-data"才可以将file转换流进行传输 --> <form> <input type="file" id="filName" name="filName"/><input type="button" id="fileUpload" value="上传"/> <input type="text" id="fileUrl" name="fileUrl"/><!--文件传递到服务器,然后将地址存储到数据库--> <input type="button" id="saveBtn" value="保存"/> <input type="button" id="downLoad" value="下载"> </form> <script>$("#downLoad").click(function (){ window.location.href="/file/downLoad01?fileId=1"; }) $("#fileUpload").click(function (){ var formData = new FormData();//固定 formData.append("filName", document.getElementById("filName").files[0]); $.ajax({ url:"/file/ajaxUpload", type:"post", data:formData, dataType:"json", /** *必须false才会自动加上正确的Content-Type */ contentType: false, /** * 必须false才会避开jQuery对 formdata 的默认处理 * XMLHttpRequest会对 formdata 进行正确的处理 */ processData: false, success:function (reData){ console.log(reData); $("#fileUrl").val(reData.data); } }) }) </script> </body> </html>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
<property name="maxUploadSize" value="524288000"></property>
</bean>
定时任务:
1定规则——我想每天的几点几来执行这个任务 我想没间隔几秒执行一次任务 延迟多久执
行任务:
2.定时任务:Spring提供,定时任务中可以书写IOC,注入Mapper 注入Service,开始书写
逻辑
3.启动规则:单线程还是多线程。
单线程:(同一时间只能做一件事。 第一件干完5 第二件:——单线程做定时任务一定
得保证你的任务清,很快就完事。
多线程:一下子可以开启多个任务。但是你得限定一次可以开几个。不能开太多,CPU
扛不住。任务都比较重
package com.service; import com.mapper.FileMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import javax.ejb.Schedule; import java.time.LocalDateTime; /** * @author zhangyifan * @version 8.0 * @description: 定时器 * @date 2021/11/25 17:14 */ @Service// 可以 的同 Component public class SechudeService { @Autowired private FileMapper fileMapper; @Scheduled(cron="0/10 * * * * ?") public void task1(){ System.out.println("taskkk1"); LocalDateTime localDateTime=LocalDateTime.now(); System.out.println(localDateTime+"---------------+ 每个 10 秒执行一次"); try { Thread.sleep(20000);//延迟函数 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(localDateTime+"------------"+"任务1完成完毕"); } @Scheduled(cron="0/20 * * * * ?") public void task2(){ System.out.println("task2"); LocalDateTime localDateTime=LocalDateTime.now(); System.out.println(localDateTime+"===="+"任务2 每隔20 执行一次"); } }
单线程定时器 配置
<!-- 开 起 spring定时器注解 单线程-->
<task:annotation-driven/>
taskkk1
2021-11-25T18:31:20.013---------------+ 每个 10 秒执行一次
2021-11-25T18:31:20.013------------任务1完成完毕
task2
2021-11-25T18:31:40.022任务2 每隔20 执行一次
taskkk1
2021-11-25T18:31:50.004---------------+ 每个 10 秒执行一次
2021-11-25T18:31:50.004------------任务1完成完毕
task2
2021-11-25T18:32:10.014任务2 每隔20 执行一次
多线程 定时器配置
<!--开启多线程定时任务-->
<task:scheduler id="bbb" pool-size="5"/><!--开多线程 5个线程数量-->
<task:annotation-driven scheduler="bbb"/>
taskkk1
2021-11-25T18:34:30.011---------------+ 每个 10 秒执行一次
task2
2021-11-25T18:34:40.016====任务2 每隔20 执行一次
2021-11-25T18:34:30.011------------任务1完成完毕
DateTimeFormat处理接收参数——字符串转换成日期;
JsonFormat处理返回值,日期串转换成字符串–
DateTimeFormat(pattern = "yyyy-MM-dd")//处理接收参数
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")//返回实体,处理成json的
private Date recorddate;
<mvc:annotation-driven ><!-- 日期格式-->
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。