springboot上传文件到阿里云
springboot上传文件到OSS
前提声明,文章借鉴了https://blog.csdn.net/wonder_dog/article/details/81152307#commentsedit博客,
大神在我没有思路的时候提供了最简洁明了的教程,话不多说:写代码吧
1.首先依赖:
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${oss.version}</version>
</dependency>
2.配置oss必备属性,这都是阿里云要求的:
他有个桶机制与存入阿里云的必备条件,带着这些条件就能进行上传
aliyun:oss:access-id: 你的idaccess-key: 你的keybucket: 你的buketendpoint: 你的endpointdir: 设置文件存放文件夹 随便写 上传自动生成expire: 失效时间
写完配置 你需要一个类进行接收,
这里用了idea的一个插件 lombk ,使用data注解 不写getset方法了
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;@Configuration
@ConfigurationProperties("aliyun.oss")
@Data
public class AliyunOssProperties {private String accessId;private String accessKey;private String bucket;private String endpoint;private String dir;private Integer maxSize = Integer.valueOf(1);private Integer expire = Integer.valueOf(30);private boolean secure = false;private String roleSessionName;public AliyunOssProperties() {}}
上传工具类:(这里就不讲了,主要还是关于Controller层的讲解)
Controller层:
整体思路:
1.Springmvc帮我们接受前端传递过来的文件
2.获取文件名
3.自定义文件名(这里其实就可以通过/来控制上传到OSS里的文件路径了)
4.将MultpaertFile格式转化成JAVA的File格式
5.调用OSS工具类上传,除了一些基础的必备参数,还需要File属性的文件和我们自定义的上传路径(也可以理解为我们自定义的图片格式)
6.删除在本地服务器的文件副本
/** logo文件上传*/@PostMapping("/uploadFile")public String uploadBlog(@RequestParam("file") MultipartFile file) {//获取原始文件名String filename = file.getOriginalFilename();//判断文件是否为空try {File toFile = null;if (file!=null) {//拼接/logStringBuilder path = new StringBuilder("log/");//获取时间戳Date fileDate = new Date();StringBuilder fileName = new StringBuilder(String.valueOf(fileDate.getTime()));//获取时间文件夹,并且与时间戳进行拼接SimpleDateFormat dateFormatShow = new SimpleDateFormat("yyyyMMdd");String date = (dateFormatShow.format(new Date()));StringBuilder newName = new StringBuilder(date);//拼接/log/时间文件夹/时间戳path.append(newName.toString());path.append("/");path.append(fileName);//获取文件后缀名String filename3 = file.getOriginalFilename();String extName = filename3.substring(filename3.lastIndexOf(".") );path.append(extName);System.out.println(path);// 将前面拼接的路径与文件名后缀进行拼接// 获得类似这样的结果/log/20190517/1558074106768.pngString yuming1 = path.toString();//将springmvc的MultipartFile类型转换成File类型//并且获取输出流将传进来的文件以流的方式写入我们新建的File类型文件File newFile = new File(filename);FileOutputStream os = new FileOutputStream(newFile);os.write(file.getBytes());//记得关流os.close();// file.transferTo(newFile);这是另一个方法,上面的是通过java流的方法,这个是springmvc的方法,效率更高// 调用阿里云的工具类上传到OSS//这个工具类只需要我们传参就好,而我们所需要的路径,就是域名+我们之前自定义的阿里云里的文件夹路径//所以这个工具类是不会返回url的,图片的访问地址就是域名+我们之前自定义拼接的阿里云的文件夹路径//网上还有其他工具类,封装的好,这里只是提供一种实现思路OSSUploadUtil.uploadFile(ali_endpoint,ali_accesskey_id,ali_accesskey_secret,ali_logstorage,newFile,yuming1);// 删除上传的文件,我们这种方法上传文件会在本地服务器留下一个文件副本,需要调用上传方法进行删除File file1=new File(filename);String s = file1.getAbsolutePath();DeleteFileUtil.delete(s);//http://你们公司跟阿里云申请的域名 拼接上我们之前自定义的文件上传路径 /log/20190517/1218209821212.jpg//拼接域名:StringBuilder yuming= new StringBuilder("http://阿里云发给你们公司的域名前缀/");//再拼接你自定义的文件存储路径yuming.append(yuming1);//这样返回给前端的就是直接能访问的url了return (yuming.toString());}return FALSE;}catch (Exception ex) {ex.printStackTrace();return FALSE;}}
}
删除上传图片后存在本地服务器的图片的工具类:
/*** 删除文件和目录**/
public class DeleteFileUtil {/*** 删除文件,可以是文件或文件夹** @param fileName* 要删除的文件名* @return 删除成功返回true,否则返回false*/public static boolean delete(String fileName) {File file = new File(fileName);if (!file.exists()) {System.out.println("删除文件失败:" + fileName + "不存在!");return false;} else {if (file.isFile())return deleteFile(fileName);elsereturn deleteDirectory(fileName);}}/*** 删除单个文件** @param fileName* 要删除的文件的文件名* @return 单个文件删除成功返回true,否则返回false*/public static boolean deleteFile(String fileName) {File file = new File(fileName);// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除if (file.exists() && file.isFile()) {if (file.delete()) {System.out.println("删除单个文件" + fileName + "成功!");return true;} else {System.out.println("删除单个文件" + fileName + "失败!");return false;}} else {System.out.println("删除单个文件失败:" + fileName + "不存在!");return false;}}/*** 删除目录及目录下的文件** @param dir* 要删除的目录的文件路径* @return 目录删除成功返回true,否则返回false*/public static boolean deleteDirectory(String dir) {// 如果dir不以文件分隔符结尾,自动添加文件分隔符if (!dir.endsWith(File.separator))dir = dir + File.separator;File dirFile = new File(dir);// 如果dir对应的文件不存在,或者不是一个目录,则退出if ((!dirFile.exists()) || (!dirFile.isDirectory())) {System.out.println("删除目录失败:" + dir + "不存在!");return false;}boolean flag = true;// 删除文件夹中的所有文件包括子目录File[] files = dirFile.listFiles();for (int i = 0; i < files.length; i++) {// 删除子文件if (files[i].isFile()) {flag = DeleteFileUtil.deleteFile(files[i].getAbsolutePath());if (!flag)break;}// 删除子目录else if (files[i].isDirectory()) {flag = DeleteFileUtil.deleteDirectory(files[i].getAbsolutePath());if (!flag)break;}}if (!flag) {System.out.println("删除目录失败!");return false;}// 删除当前目录if (dirFile.delete()) {System.out.println("删除目录" + dir + "成功!");return true;} else {return false;}}public static void main(String[] args) {// // 删除单个文件
// String file = "c:/test/test.txt";
// DeleteFileUtil.deleteFile(file);
// System.out.println();// 删除一个目录String dir = "D:/home/web/upload/upload/files";DeleteFileUtil.deleteDirectory(dir);
// System.out.println();
// // 删除文件
// dir = "c:/test/test0";
// DeleteFileUtil.delete(dir);}}
springboot上传文件到阿里云相关推荐
- 微信小程序直接上传文件到阿里云OSS组件封装
微信小程序直接上传文件到OSS 1. 封装公共方法 在根目录utils目录新建一个upload文件夹: // utils/upload/base64.jsvar base64EncodeChars = ...
- mac SCp上传文件到阿里云服务器centos
1.mac链接远程阿里云服务器centos命令: ssh -A -p 22 root@ip 2.mac上传文件到阿里云centos: 3.阿里云服务器weapps下文件删除命令: 4.上传文件相关 m ...
- java上传文件至阿里云oss工具类
第一步:引入oss maven坐标 <dependency><groupId>com.aliyun.oss</groupId><artifactId>a ...
- 上传文件到阿里云linux服务器
上传文件到阿里云linux服务器 安装Putty软件(用来连接阿里云服务器的一款软件,里面有用来上传文件到服务器的可执行文件) 参考以下网址: https://help.aliyun.com/docu ...
- Android(安卓)上传文件到阿里云点播,阿里云点播转码
Android(安卓)上传文件到阿里云点播,阿里云点播转码 文章目录 Android(安卓)上传文件到阿里云点播,阿里云点播转码 一:登录阿里云点播平台配置添加转码模板组 1:需要什么参数,可自行填写 ...
- 上传文件到阿里云OSS对象存储,查询访问地址,删除文件
一:pom添加以来jar <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun ...
- Springboot上传视频到阿里云(视频点播)和aliyun-java-sdk-vod依赖报红问题
一.pom.xm中导入依赖 <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-ja ...
- 【微信小程序】上传文件到阿里云OSS
小程序上传文件到OSS也是利用OSS提供的PostObject接口来实现表单文件上传到OSS 步骤1:配置Bucket跨域访问 客户端进行表单直传到OSS时,会从浏览器向OSS发送带有Origin的请 ...
- 小程序上传文件到阿里云oss
本文仅举例上传图片和上传视频! 准备工作: 需要引入的js文件:https://download.csdn.net/download/impossible1994727/12328614 参考文档:h ...
最新文章
- mysql怎么禁止远程连接_mysql禁止远程访问
- C++primer CH12智能指针
- ISO8583报文格式分析
- handler和thread之间如何传输数据_HTTP和TCP之间的关系
- 容器技术Docker K8s 13 容器服务Kubernetes版ACK详解-使用镜像快速创建有状态应用
- 英文java简历模板下载_java软件工程师英文简历模板下载
- LookupError(‘unknown encoding: GB2312‘)
- python josn数据解析
- 二十四节气—立秋,文案、海报分享。
- Openssl win8 用法
- 族蚂网针对宠物网站建设有哪些新体验
- 删除win10 qaa输入法
- 计算机基础常用缩略语
- Google Earth Engine(GEE)——Landsat ETM+ to OLI 协调
- Physically Based Render初学者PBR整理
- SPI控制MS5614T
- 【编译原理】语义分析
- 科研论文citespace下载
- 扎克伯格上手演示四款VR头显原型机,Meta透露元宇宙「家底」
- 初入Java测试员之路
热门文章
- 一文带你了解外贸海关数据
- 【Gorho】springboot整合Shiro+jwt 前后端分离 超级详细的shiro+jwt鉴权过程
- Jmeter书中不会教你的(94)——将时间戳转换为日期格式
- 【VUE】学习记录一
- 钉钉和微信通过h5服务器对接,【案例】钉钉/企业微信/在线、工单等集成对接 | 网易七鱼...
- 电子学会python三级笔记
- 移动应用开发实践-Task5-通过Json获取城市列表
- ROS Navigation之map_server完全详解
- mysql怎么添加查询时间限制_mysql如何限制sql查询时间,
- 命名空间的问题导致No transform from [..._link] to [base_link]