Spring Boot 2020 官方基础68课程第七个 UploadingFiles 上传文件

34 篇文章 0 订阅

本节是系列笔记第七课。这是一个Spring上传文件的例子。前面六节可参考我的博客。

本章创建一个依赖   Spring Web 、 Thymeleaf  .的SpringBoot项目:

这里要先说明一件事。就是这里提到:在生产场景,你更多机会存储文件在数据库,NoSQL,Mongo's GridFS.最好别直接存在项目目录里面。这是实话。我们就可能会用到阿里云云存储OSS。七牛啥的。所以我们需要提供一个StorageService ,这里还是用的文件系统。他的接口如下:

package  com.dongyu.demo.storage;

import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

import java.nio.file.Path;
import java.util.stream.Stream;

public interface StorageService {

	void init();

	void store(MultipartFile file);

	Stream<Path> loadAll();

	Path load(String filename);

	Resource loadAsResource(String filename);

	void deleteAll();

}

当然我还要写一个接口实现。项目结构如下

/springGuides7-uploading-files/src/main/java/com/dongyu/uploadingfiles/storage/StorageService.java

接口实现:

package com.dongyu.uploadingfiles.storage;

import java.nio.file.Path; 
import java.util.stream.Stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

 
@Service
public class FateMsgStorageService implements StorageService {

	private static final Logger log =LoggerFactory.getLogger(FateMsgStorageService.class);
	
 
	@Autowired
	public FateMsgStorageService() {
		log.info("===FateMsgStorageService @Autowired...0");
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		log.info("===FateMsgStorageService init...1");
	}

	@Override
	public void store(MultipartFile file) {
		// TODO Auto-generated method stub
		log.info("===FateMsgStorageService store...2");
	}

	@Override
	public Stream<Path> loadAll() {
		// TODO Auto-generated method stub
		log.info("===FateMsgStorageService loadAll...3");
		return null;
	}

	@Override
	public Path load(String filename) {
		log.info("===FateMsgStorageService load...4");
		return null;
	}

	@Override
	public Resource loadAsResource(String filename) {
		log.info("===FateMsgStorageService loadAsResource...5");
		return null;
	}

	@Override
	public void deleteAll() {
		// TODO Auto-generated method stub
		log.info("===FateMsgStorageService deleteAll...6");
	}

}

为了初始化Store.需要在项目启动的时候做点事情。这里用CommandLineRunner.

package com.dongyu.uploadingfiles;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import com.dongyu.uploadingfiles.storage.StorageService;

@SpringBootApplication
public class SpringGuides7UploadingFilesApplication {

	private static final Logger log =LoggerFactory.getLogger(SpringGuides7UploadingFilesApplication.class);
	
	
	public static void main(String[] args) {
		log.info("===SpringApplication.run start ."); 
		SpringApplication.run(SpringGuides7UploadingFilesApplication.class, args);
		log.info("===SpringApplication.run end ."); 
	}

	@Bean 
	CommandLineRunner init(StorageService storageService) {
		log.info("===CommandLineRunner init ."); 
		return (args) -> { // lambda 表达式 
			storageService.deleteAll();
			storageService.init();
		};
	}

}
 

按照项目结构复制这3个文件后。就可以run as-> spring boot app了。

看下我们的结果:

在CommandLineRuner init前SpringBoot已经帮我Autowired一个StorageService.,

所以我在CommandlineRuner里可以对Service 做相应的动作。

这一部分如果有什么问题,请给我留言。毕竟我看官网的例子,使用的接口实现非常复杂,我需要拆开,一步一步看是哪里除了问题。

好的。我现在要jia'r

 

 

 

项目源码下载地址:https://github.com/spring-guides/gs-uploading-files.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东宇科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值