网站首页 > 精选教程 正文
我们使用SpringBoot来实现文件的上传,本文中的SpringBoot环境和SpringBoot+MyBatis+通用Mapper中的环境基本一致,我们就不再重复造轮子了,而是直接上手这个功能。
依赖
在SpringBoot+MyBatis+通用Mapper中我们已经引入了Web开发相关的依赖,所以这里就不需要再次引入了。
配置
我们需要对SpringMVC的文件上传功能进行一些配置,比如MaxFileSize等等属性。 我们使用JavaConfig来进行配置,写一个配置类UploadConfig ,代码如下:
@Configuration
public class UploadConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个数据大小
factory.setMaxFileSize("10240KB");
/// 总上传数据大小
factory.setMaxRequestSize("102400KB");
return factory.createMultipartConfig();
}
然后我们在application.yml文件中自定义一些配置:
file:
upload:
path: G:\temp\images\ #文件上传目标路径
allowTypes: #文件上传允许的类型
- image/jpeg
- image/png
- image/bmp
使用ConfigurationProperties将配置读取到Java文件中:
@Data
@Component
@ConfigurationProperties(prefix = "file.upload")
public class UploadProperties {
private String path;
private List<String> allowTypes;
}
代码
在写文件上传的代码之前,我们还需要做一些准备工作,比如准备一些工具类,可以方便我们实现文件的上传功能。
编写工具类
- 唯一ID生成器,可以生成唯一ID。
public class IDUtils {
/**
* 唯一ID生成器,可以生成唯一ID
* @return
*/
public static String generateUniqueId() {
return UUID.randomUUID().toString()+System.currentTimeMillis();
}
}
- 文件名称替换工具,用来替换文件名称,避免文件名称重复而导致名称相同的文件被覆盖掉。
public class UploadUtils {
/**
* 文件名称替换工具,将文件名称替换为随机名称
* @param oldName
* @return
*/
public static String generateFileName(String oldName){
String suffix = oldName.substring(oldName.lastIndexOf("."));
return IDUtils.generateUniqueId()+suffix;
}
}
编写Web层
@RestController
@RequestMapping("upload")
public class UploadController {
@Autowired
private UploadService uploadService;
@PostMapping("image")
public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) throws Exception {
return ResponseEntity.ok(uploadService.uploadImage(file));
}
}
编写Service层
- Service层接口
public interface UploadService {
/**
* 上传图片
* @param file
* @return
*/
String uploadImage(MultipartFile file) throws Exception;
}
- Service层实现
@Service
public class UploadServiceImpl implements UploadService {
@Autowired
private UploadProperties uploadProperties;
@Override
public String uploadImage(MultipartFile file) throws IOException {
if(!uploadProperties.getAllowTypes().contains(file.getContentType())){
throw new IOException("文件上传类型错误!");
}
String fileName = UploadUtils.generateFileName(file.getOriginalFilename());
file.transferTo(new File(uploadProperties.getPath()+fileName));
return fileName;
}
}
测试
由于我们也没有写html文件,所以我们直接使用Postman这个软件来测试。
第一步:我们使用POST请求,请求路径为/upload/image。
【注意,我们需要将请求头中的内容设置为空】
第二步:我们在请求体中将文件携带过去。
第三步,发出请求。
如果您觉得文章对您有帮助,可以点赞评论转发支持一下~谢谢!
原文链接:https://juejin.cn/post/6985079687546404894
猜你喜欢
- 2024-11-23 如何将本地文件提交到GitHub仓库?
- 2024-11-23 再见FTP/SFTP!是时候拥抱下一代文件传输利器Croc了
- 2024-11-23 「Java」使用WatchService监听文件变化
- 2024-11-23 springboot上传文件出错IOException: The temporary upload location
- 2024-11-23 Java,通过文件获取MimeType的方式,文件扩展名获取ContentType
- 2024-11-23 将20M文件从30秒压缩到1秒,我是如何做到的?
- 2024-11-23 拥抱文件传输利器 Croc
- 2024-11-23 完整教程:使用Spring Boot实现大文件断点续传及文件校验
- 2024-11-23 什么是JVM和字节码.class文件?它们的关联又是什么?
- 2024-11-23 java中oss分片上传(包含业务和详细讲解)
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)