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 ...
随机推荐
- JDK_API剖析之java.util包
Java的实用工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构. 一.接口 1.Collection<E> 接口 自1.2开始有 继承Iterable< ...
- Jmeter(三) 从上传图片来入门Jmeter
用Jmeter上传用户头像到人人网 先用抓包工具Fiddler把上传操作的报文抓取下来 开启Jmeter,在测试计划中创建一个线程组,取名为“图片上传” 再在线程组中创建一个HTTP请求 在请求报文中 ...
- python爬取智联招聘职位信息(单进程)
我们先通过百度搜索智联招聘,进入智联招聘官网,一看,傻眼了,需要登录才能查看招聘信息 没办法,用账号登录进去,登录后的网页如下: 输入职位名称点击搜索,显示如下网页: 把这个URL:https://s ...
- Python3学习笔记(十六):随机数模块random
一.random模块 1.random.random(): 返回0-1之间的随机浮点数 import random print(random.random()) 0.9348690085059901 ...
- Luogu P4707 重返现世 (拓展Min-Max容斥、DP)
题目链接 https://www.luogu.org/problem/P4707 题解 最近被神仙题八连爆了-- 首先Min-Max容斥肯定都能想到,问题是这题要用一个扩展版的--Kth Min-Ma ...
- [CSP-S模拟测试]:迷宫(最短路)
题目传送门(内部题123) 输入格式 输入文件的第一行为四个正整数$n,m,k,d$. 接下来$m$行,每行三个整数$u,v,w$,描述一条无向道路. 输入文件最后一行包含$k$个整数,为$p_0,p ...
- ajax报告申请添加
function reportApplyAddFun(){ $("#dlg").dialog("open").dialog("center" ...
- IP处理模块IPy
#安装IPy模块#pip install IPy #from IPy import IPip_s = input('please input an IP or net-range:')#192.168 ...
- docker top 和 docker exec ps 命令查看的PID区别
区别在于 docker top 查看到的 PID 属于宿主机的 PID.我们可以通过 宿主机执行 ps -ef 查看结果 也可以进去容器执行 top 和 ps查看结果
- Android 图片内存优化与图片压缩
1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFactory.decodeResource 来设置一张大图,因为这些方法在完成 ...