springboot处理单个文件上传
1. 引入pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
2. 编写application.yml
server:
port: 8082
spring:
application:
name: upload-service
servlet:
multipart:
max-file-size: 5MB
3. 编写UploadService
package com.leyou.upload.service;
import com.leyou.upload.controller.UploadController;
import org.apache.commons.lang.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* @author john
* @date 2019/11/30 - 15:20
*/
@Service
public class UploadService {
private static final Logger LOGGER = LoggerFactory.getLogger(UploadController.class);
//设置文件的contentType
private static final List<String> CONTENT_TYPES = Arrays.asList("image/jpg", "image/jpeg", "image/gif");
//设置文件存储的基路径
private static final String BASE_PATH = "D:\\imooc\\project\\images\\";
//设置文件返回的url
private static final String IMAGE_URL = "http://image.leyou.com/";
public String uploadImage(MultipartFile file) {
String originalFilename = file.getOriginalFilename();
String contentType = file.getContentType();
String ext = null;
if (originalFilename == null || !originalFilename.contains(".")) {
//图片名错误直接返回
return null;
}
ext = originalFilename.substring(originalFilename.lastIndexOf("."));
// 1. 文件类型
if (contentType == null) {
LOGGER.info("文件{}获取不到contentType", originalFilename);
return null;
}
if (!CONTENT_TYPES.contains(contentType.toLowerCase())) {
LOGGER.info("文件上传失败: {},文件类型{}不合法", originalFilename, contentType);
return null;
}
try {
// 2. 校验文件的内容
BufferedImage bufferImage = ImageIO.read(file.getInputStream());
if (bufferImage == null || bufferImage.getWidth() <= 0 || bufferImage.getHeight() <= 0) {
LOGGER.info("文件上传失败: {},文件内容不合法", originalFilename);
return null;
}
//设置文件上传后的生成的新名字
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String newfileName = uuid + ext;
//设置上传图片的实际存储目录
String dirPath = DateFormatUtils.format(new Date(), "yyyyMMdd");
String filepath = BASE_PATH + File.separator + dirPath;
//创建新路径文件夹
File targetFile = new File(filepath);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
// 3. 保存到服务器
file.transferTo(new File(filepath + File.separator + newfileName));
// 4. 返回url路径
return IMAGE_URL + dirPath + File.separator + newfileName;
} catch (IOException e) {
e.printStackTrace();
LOGGER.info("文件{}上传失败:服务器异常 {}", originalFilename, e.getMessage());
return null;
}
}
}
3. 编写UploadController
package com.leyou.upload.controller;
import com.leyou.upload.service.UploadService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
/**
* @author john
* @date 2019/11/30 - 15:18
*/
@Controller
@RequestMapping("upload")
public class UploadController {
@Autowired
private UploadService uploadService;
@PostMapping("image")
public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
String url = uploadService.uploadImage(file);
if (StringUtils.isBlank(url)) {
return ResponseEntity.badRequest().build();
}
return ResponseEntity.status(HttpStatus.CREATED).body(url);
}
}
测试上传


springboot处理单个文件上传的更多相关文章
- springboot文件上传: 单个文件上传 和 多个文件上传
单个文件上传 //文件上传统一处理 @RequestMapping(value = "/upload",method=RequestMethod.POST) @ResponseBo ...
- SpringBoot: 6.文件上传(转)
1.编写页面uploadFile.html <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- Springboot如何启用文件上传功能
网上的文章在写 "springboot文件上传" 时,都让你加上模版引擎,我只想说,我用不上,加模版引擎,你是觉得我脑子坏了,还是觉得我拿不动刀了. springboot如何启用文 ...
- spring mvc文件上传(单个文件上传|多个文件上传)
单个文件上传spring mvc 实现文件上传需要引入两个必须的jar包 1.所需jar包: commons-fileupload-1.3.1.jar ...
- sruts2:单个文件上传,多个文件上传(属性驱动)
文件上传功能在Struts2中得到了很好的封装,主要使用fileUpload上传组件. 1. 单个文件上传 1.1 创建上传单个文件的JSP页面.显示提交结果的JSP页面 uploadTest1.js ...
- Struts2 单个文件上传/多文件上传
1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...
- SpringBoot项目实现文件上传和邮件发送
前言 本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能. SpringBoot 文件上传 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要 ...
- SpringBoot+BootStrap多文件上传到本地
1.application.yml文件配置 # 文件大小 MB必须大写 # maxFileSize 是单个文件大小 # maxRequestSize是设置总上传的数据大小 spring: servle ...
- springboot升级导致文件上传自动配置/tmp目录问题解决
1,..\web\src\main\resources\spring\web-men-applicationContext.xml 保留原有的bean配置 <bean id="mult ...
随机推荐
- Travis CI eval ./gradlew assemble 错误
问题 在进行 Travis CI 进行集成编译的时候出现错误. <-------------> 0% WAITINGThe command "eval ./gradlew ass ...
- 1143, 3997: Dilworth定理的简单应用
偏序集上的最小链覆盖等于最长反链 于是两道题 1143: [CTSC2008]祭祀river 求偏序集上的最长反链 转换成偏序集上的最小链覆盖 求个闭包,转换成最小路径覆盖,二分图匹配一发 #incl ...
- kafka监控指标项
监控配置 kafka基本分为broker.producer.consumer三个子项,每一项的启动都需要用到 $KAFKA_HOME/bin/kafka-run-class.sh 脚本,在该脚本中 ...
- Mysql 里CHAR和VARCHAR的最大长度及一些注意事项
先写出结论: Mysql 5中 非空CHAR的最大总长度是255[字节]:非空VARCHAR的最大总长度是65533[字节]. 可空CHAR的最大总长度是254[字节]:可空VARCHAR的最大总长度 ...
- C++入门经典-例4.4-循环嵌套之求n的阶乘
1:代码如下: // 4.4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- centos6 centos7 配置开机启动服务
centos 6 :使用chkconfig命令即可. 我们以apache服务为例: #chkconfig --add apache 添加nginx服务 #chkconfig apache on 开机自 ...
- 第九周学习总结&实验报告(7)
完成火车站售票程序的模拟. 要求: (1)总票数1000张; (2)10个窗口同时开始卖票; (3) 卖票过程延时1秒钟; (4)不能出现一票多卖或卖出负数号票的情 况 实验代码: package y ...
- cmd 查看域名对应的 IP
1.cmd nslookup 2.输入 域名,例如:www.baidu.com
- 选择company回显appname
function showSupCompany() { var obj = {}; obj.label = ScompanyId.getSelectedLabel(); obj.value = Sco ...
- Android WebView使用与JavaScript使用
WebView基本使用 WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?x ...