MultipartFile文件与Scheduled定时器

本文深入解析MultipartFile类的功能,包括获取文件名、内容、类型及转换为File的方法,并介绍定时任务的实现,涉及cron表达式的使用及Scheduled注解的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件上传和定时器处理

MultipartFile=
1、在客户端的文件系统中返回原始文件名
getOriginalFilename()

2、返回一个InputStream以从中读取文件的内容。通过此方法就可以获取到流
getInputStream()

3、返回多部分表单中参数的名称。
getName()

4、返回文件的内容类型
getContentType()

5、将收到的文件传输到给定的目标文件//MultipartFile 转换成 File
transferTo

6、获取后缀名
String suffix = fileName.substring(file.getOriginalFilename().lastIndexOf(".") + 1);

定时器:Scheduled
1:在application类添加注解:@EnableScheduling //扫描定时任务
2:创建ScheduleTask类:

@Component
public class MyScheduledTask {

@Scheduled
public void scheduledTask(){
    //开始执行任务
}

}

//@Component注解用于对那些比较中立的类进行注释;
//相对与在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释
@Component
@EnableScheduling // 1.开启定时任务
@EnableAsync // 2.开启多线程

================================================
cron:指定时间执行

  • 第一位,表示秒,取值0-59
  • 第二位,表示分,取值0-59
  • 第三位,表示小时,取值0-23
  • 第四位,日期天/日,取值1-31
  • 第五位,日期月份,取值1-12
  • 第六位,星期,取值1-7,星期一,星期二…,注:不是第1周,第二周的意思
    另外:1表示星期天,2表示星期一。
  • 第7为,年份,可以留空,取值1970-2099

//特殊符号
()星号:可以理解为每的意思,每秒,每分,每天,每月,每年…
(?)问号:问号只能出现在日期和星期这两个位置,表示这个位置的值不确定,每天3点执行,所以第六位星期的位置,我们是不需要关注的,就是不确定的值。同时:日期和星期是两个相互排斥的元素,通过问号来表明不指定值。比如,1月10日,比如是星期1,如果在星期的位置是另指定星期二,就前后冲突矛盾了。
(-)减号:表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12
(,)逗号:表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期一,星期二,星期四
(/)斜杠:如:x/y,x是开始值,y是步长,比如在第一位(秒) 0/15就是,从0秒开始,每15秒,最后就是0,15,30,45,60 另:
/y,等同于0/y

//例子
0 0 3 * * ? 每天3点执行
0 5 3 * * ? 每天3点5分执行
0 5 3 ? * * 每天3点5分执行,与上面作用相同
0 5/10 3 * * ? 每天3点的 5分,15分,25分,35分,45分,55分这几个时间点执行
0 10 3 ? * 1 每周星期天,3点10分 执行,注:1表示星期天

0 10 3 ? * 1#3 每个月的第三个星期,星期天 执行,#号只能出现在星期的位置

求关注包养!
在这里插入图片描述

### 使用 Spring Boot 构建文件备份系统 #### 项目初始化 为了构建一个基于 Spring Boot 的文件备份系统,首先需要创建一个新的 Spring Boot 项目并引入必要的依赖项。可以使用 Spring Initializr 来快速搭建项目框架。 ```xml <dependencies> <!-- Web support --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- File system operations --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.8.0</version> </dependency> <!-- Task scheduling --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-task-scheduling</artifactId> </dependency> </dependencies> ``` 此配置确保应用程序能够处理 HTTP 请求、执行文件操作以及调度定期任务[^1]。 #### 文件上传接口 定义 RESTful API 接口允许客户端上传待备份的文件到服务器端: ```java @RestController @RequestMapping("/api/backup") public class BackupController { @PostMapping("/upload") public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) { try { Files.copy(file.getInputStream(), Paths.get("uploads/" + file.getOriginalFilename())); return ResponseEntity.ok("File uploaded successfully"); } catch (IOException e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); } } } ``` 这段代码实现了接收来自用户的文件并将它们保存至指定目录的功能。 #### 定期备份逻辑 利用 `@Scheduled` 注解设置定时器,在特定时间间隔内自动触发文件复制过程: ```java @Component public class ScheduledBackupTasks { private static final Logger logger = LoggerFactory.getLogger(ScheduledBackupTasks.class); @Scheduled(fixedRate = 60 * 60 * 1000L) // Every hour public void performPeriodicBackups() throws IOException { Path sourceDir = Paths.get("uploads/"); Path targetDir = Paths.get("backups/"); if (!Files.exists(targetDir)) { Files.createDirectories(targetDir); } List<Path> filesToCopy = Files.walk(sourceDir) .filter(Files::isRegularFile) .collect(Collectors.toList()); for (Path path : filesToCopy) { String fileName = path.getFileName().toString(); Path destinationFilePath = targetDir.resolve(fileName); if(!Files.exists(destinationFilePath)){ Files.copy(path,destinationFilePath ); logger.info("Copied {} to backup directory",fileName); } } logger.info("Completed periodic backups."); } } ``` 上述方法每小时运行一次,遍历源文件夹中的所有文件,并将其副本存储在一个单独的位置作为备份[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值