上一章节【工具】OSS阿里云存储服务--超级简单--个人还是觉得Fastdfs好玩

https://www.cnblogs.com/Yangbuyi/p/13488323.html

接上一个文章讲解还有一个东西忘记说

AccessKey 这玩意用来搞认证的 差不多

开通就好了..等会要用到

步入正题创建oss模块也就是一个项目

导入依赖

    <dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- 上传文件依赖组件 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency> <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- aliyun oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.7.RELEASE</version>
<scope>test</scope>
</dependency> </dependencies>
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun Repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

创建OSSUploadUtil.java

package top.yangbuyi.utils;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import top.yangbuyi.utils.config.OSSConfig; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID; /**
* @description: 杨不易网站:www.yangbuyi.top
* @program: yangbuyispringcloudparent
* @ClassName: OSSUtils
* @create: 2020-08-11 23:09
* @author: yangbuyi
* @since: JDK1.8
* @OSSUploadUtil: 阿里云OSS文件上传工具类
**/ public class OSSUploadUtil { private static OSSConfig config = null; /**
*
* @MethodName: uploadFile
* @Description: OSS单文件上传
* @param file
* @param fileType 文件后缀
* @return String 文件地址
*/
public static String uploadFile(File file, String fileType){
config = config==null?new OSSConfig():config;
String fileName = config.getPicLocation()+ UUID.randomUUID().toString().toUpperCase().replace("-", "")+"."+fileType; //文件名,根据UUID来
return putObject(file,fileType,fileName);
} /**
*
* @MethodName: updateFile
* @Description: 更新文件:只更新内容,不更新文件名和文件地址。
* (因为地址没变,可能存在浏览器原数据缓存,不能及时加载新数据,例如图片更新,请注意)
* @param file
* @param fileType
* @param oldUrl
* @return String
*/
public static String updateFile(File file,String fileType,String oldUrl){
String fileName = getFileName(oldUrl);
if(fileName==null) return null;
return putObject(file,fileType,fileName);
} /**
*
* @MethodName: replaceFile
* @Description: 替换文件:删除原文件并上传新文件,文件名和地址同时替换
* 解决原数据缓存问题,只要更新了地址,就能重新加载数据)
* @param file
* @param fileType 文件后缀
* @param oldUrl 需要删除的文件地址
* @return String 文件地址
*/
public static String replaceFile(File file,String fileType,String oldUrl){
boolean flag = deleteFile(oldUrl); //先删除原文件
if(!flag){
//更改文件的过期时间,让他到期自动删除。
}
return uploadFile(file, fileType);
} /**
*
* @MethodName: deleteFile
* @Description: 单文件删除
* @param fileUrl 需要删除的文件url
* @return boolean 是否删除成功
*/
public static boolean deleteFile(String fileUrl){
config = config==null?new OSSConfig():config; String bucketName = OSSUploadUtil.getBucketName(fileUrl); //根据url获取bucketName
String fileName = OSSUploadUtil.getFileName(fileUrl); //根据url获取fileName
if(bucketName==null||fileName==null) return false;
OSSClient ossClient = null;
try {
ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
GenericRequest request = new DeleteObjectsRequest(bucketName).withKey(fileName);
ossClient.deleteObject(request);
} catch (Exception oe) {
oe.printStackTrace();
return false;
} finally {
ossClient.shutdown();
}
return true;
} /**
*
* @MethodName: batchDeleteFiles
* @Description: 批量文件删除(较快):适用于相同endPoint和BucketName
* @param fileUrls 需要删除的文件url集合
* @return int 成功删除的个数
*/
public static int deleteFile(List<String> fileUrls){
int deleteCount = 0; //成功删除的个数
String bucketName = OSSUploadUtil.getBucketName(fileUrls.get(0)); //根据url获取bucketName
List<String> fileNames = OSSUploadUtil.getFileName(fileUrls); //根据url获取fileName
if(bucketName==null||fileNames.size()<=0) return 0;
OSSClient ossClient = null;
try {
ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
DeleteObjectsRequest request = new DeleteObjectsRequest(bucketName).withKeys(fileNames);
DeleteObjectsResult result = ossClient.deleteObjects(request);
deleteCount = result.getDeletedObjects().size();
} catch (OSSException oe) {
oe.printStackTrace();
throw new RuntimeException("OSS服务异常:", oe);
} catch (ClientException ce) {
ce.printStackTrace();
throw new RuntimeException("OSS客户端异常:", ce);
} finally {
ossClient.shutdown();
}
return deleteCount; } /**
*
* @MethodName: batchDeleteFiles
* @Description: 批量文件删除(较慢):适用于不同endPoint和BucketName
* @param fileUrls 需要删除的文件url集合
* @return int 成功删除的个数
*/
public static int deleteFiles(List<String> fileUrls){
int count = 0;
for (String url : fileUrls) {
if(deleteFile(url)){
count++;
}
}
return count;
} /**
*
* @MethodName: putObject
* @Description: 上传文件
* @param file
* @param fileType
* @param fileName
* @return String
*/
private static String putObject(File file,String fileType,String fileName){
config = config==null?new OSSConfig():config;
String url = null; //默认null
OSSClient ossClient = null;
try {
ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
InputStream input = new FileInputStream(file);
ObjectMetadata meta = new ObjectMetadata(); // 创建上传Object的Metadata
meta.setContentType(OSSUploadUtil.contentType(fileType)); // 设置上传内容类型
meta.setCacheControl("no-cache"); // 被下载时网页的缓存行为
PutObjectRequest request = new PutObjectRequest(config.getBucketName(), fileName,input,meta); //创建上传请求
ossClient.putObject(request);
url = config.getEndpoint().replaceFirst("https://","https://"+config.getBucketName()+"."+ config.getEndpoint())+"/"+fileName; //上传成功再返回的文件路径
} catch (OSSException oe) {
oe.printStackTrace();
return null;
} catch (ClientException ce) {
ce.printStackTrace();
return null;
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} finally {
ossClient.shutdown();
}
return url;
} /**
*
* @MethodName: contentType
* @Description: 获取文件类型
* @param FileType
* @return String
*/
private static String contentType(String fileType){
fileType = fileType.toLowerCase();
String contentType = "";
switch (fileType) {
case "bmp": contentType = "image/bmp";
break;
case "gif": contentType = "image/gif";
break;
case "png":
case "jpeg":
case "jpg": contentType = "image/jpeg";
break;
case "html":contentType = "text/html";
break;
case "txt": contentType = "text/plain";
break;
case "vsd": contentType = "application/vnd.visio";
break;
case "ppt":
case "pptx":contentType = "application/vnd.ms-powerpoint";
break;
case "doc":
case "docx":contentType = "application/msword";
break;
case "xml":contentType = "text/xml";
break;
case "mp4":contentType = "video/mp4";
break;
default: contentType = "application/octet-stream";
break;
}
return contentType;
} /**
*
* @MethodName: getBucketName
* @Description: 根据url获取bucketName
* @param fileUrl 文件url
* @return String bucketName
*/
private static String getBucketName(String fileUrl){
String http = "http://";
String https = "https://";
int httpIndex = fileUrl.indexOf(http);
int httpsIndex = fileUrl.indexOf(https);
int startIndex = 0;
if(httpIndex==-1){
if(httpsIndex==-1){
return null;
}else{
startIndex = httpsIndex+https.length();
}
}else{
startIndex = httpIndex+http.length();
}
int endIndex = fileUrl.indexOf(".oss-");
return fileUrl.substring(startIndex, endIndex);
} /**
*
* @MethodName: getFileName
* @Description: 根据url获取fileName
* @param fileUrl 文件url
* @return String fileName
*/
private static String getFileName(String fileUrl){
String str = "yangbuyi.top/";
int beginIndex = fileUrl.indexOf(str);
if(beginIndex==-1) return null;
return fileUrl.substring(beginIndex+str.length());
} /**
*
* @MethodName: getFileName
* @Description: 根据url获取fileNames集合
* @param fileUrl 文件url
* @return List<String> fileName集合
*/
private static List<String> getFileName(List<String> fileUrls){
List<String> names = new ArrayList<>();
for (String url : fileUrls) {
names.add(getFileName(url));
}
return names;
}
}

创建Config.properties配置文件到resources下

#阿里云OSS配置
endpoint = oss-img.yangbuyi.top # 访问节点 这里表示 uri访问的图片域名相当于一个域名
bucketName = yangbuyi-img # 你创建的Bucket
picLocation = 文件夹路径 随便填 如: yangbuyi/
accessKeyId = 第一张图片要你开通的 ID
accessKeySecret = 第一张图片要你开通的 密码

创建SystemConfig.java 处理配置文件

package top.yangbuyi.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; /**
* @description: 杨不易网站:www.yangbuyi.top
* @program: yangbuyispringcloudparent
* @ClassName: SystemConfig
* @create: 2020-08-12 00:04
* @author: yangbuyi
* @since: JDK1.8
* @SystemConfig:
**/
public class SystemConfig { private static final String CONFIG_PROPERTIES="config.properties"; public static String getConfigResource(String key) throws IOException {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties properties = new Properties();
InputStream in = loader.getResourceAsStream(CONFIG_PROPERTIES);
properties.load(in);
String value = properties.getProperty(key);
// 编码转换,从ISO-8859-1转向指定编码
value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
in.close();
return value;
}
}

创建config文件夹下的OSSConfig.java

package top.yangbuyi.utils.config;

import top.yangbuyi.utils.SystemConfig;

import java.io.IOException;

/**
* @description: 杨不易网站:www.yangbuyi.top
* @program: yangbuyispringcloudparent
* @ClassName: OSSConfig
* @create: 2020-08-12 00:04
* @author: yangbuyi
* @since: JDK1.8
* @OSSConfig:
**/ public class OSSConfig{
private String endpoint; //连接区域地址
private String accessKeyId; //连接keyId
private String accessKeySecret; //连接秘钥
private String bucketName; //需要存储的bucketName
private String picLocation; //图片保存路径 /*
* 加载配置文件 初始化 参数
* 也可 yml加载 看你自己
* */ public OSSConfig() {
try {
this.endpoint = SystemConfig.getConfigResource("endpoint");
this.bucketName = SystemConfig.getConfigResource("bucketName");
this.picLocation = SystemConfig.getConfigResource("picLocation");
this.accessKeyId = SystemConfig.getConfigResource("accessKeyId");
this.accessKeySecret = SystemConfig.getConfigResource("accessKeySecret"); System.out.println(toString());
System.out.println(toString());
System.out.println(toString());
System.out.println(toString());
System.out.println(toString());
System.out.println(toString());
System.out.println(toString());
System.out.println(toString()); } catch (IOException e) {
e.printStackTrace();
}
} public String getEndpoint() {
return endpoint;
}
public void setEndpoint(String endpoint) {
this.endpoint = endpoint;
}
public String getAccessKeyId() {
return accessKeyId;
}
public void setAccessKeyId(String accessKeyId) {
this.accessKeyId = accessKeyId;
}
public String getAccessKeySecret() {
return accessKeySecret;
}
public void setAccessKeySecret(String accessKeySecret) {
this.accessKeySecret = accessKeySecret;
}
public String getBucketName() {
return bucketName;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public String getPicLocation() {
return picLocation;
}
public void setPicLocation(String picLocation) {
this.picLocation = picLocation;
} @Override
public String toString() {
return "OSSConfig{" +
"endpoint='" + endpoint + '\'' +
", accessKeyId='" + accessKeyId + '\'' +
", accessKeySecret='" + accessKeySecret + '\'' +
", bucketName='" + bucketName + '\'' +
", picLocation='" + picLocation + '\'' +
'}';
}
}

在测试当中创建测试类

import org.junit.Test;
import top.yangbuyi.utils.OSSUploadUtil;
import top.yangbuyi.utils.OSSUtils; import java.io.File; /**
* @description: 杨不易网站:www.yangbuyi.top
* @program: yangbuyispringcloudparent
* @ClassName: two
* @create: 2020-08-12 00:06
* @author: yangbuyi
* @since: JDK1.8
* @two: OSSUploadUtil.uploadFile(File file, String fileType) //单文件上传,type:文件后缀名
* OSSUploadUtil.updateFile(File file, String fileType, String oldUrl)//更新文件:只更新内容,不更新文件名和文件地址。
* OSSUploadUtil.replaceFile(File file, String fileType, String oldUrl)//替换文件,删除源文件并上传新文件,文件名和地址也改变
* OSSUploadUtil.deleteFile(List<String> fileUrls) //删除多文件,根据问价url来自定获取其中的bucket和文件名,用于bucket和文件名可能存在不同的,循环调用deleteFile方法
* OSSUploadUtil.deleteFile(String fileUrl) //删除单文件
* OSSUploadUtil.deleteFiles(List<String> fileUrls) //删除多文件,根据配置直接取删除多个文件,bucket和文件地址从配置中获取,用于多文件bucket和文件名都相同的
**/ public class two { @Test
public void t() {
// 文件上传
File file = new File("F:\\美女图片\\dac18dd66fbbf53ddd55563b5edecac6.jpg");
String jpg = OSSUploadUtil.uploadFile(file, "jpg");
System.out.println(jpg); // 更新 只更新 图片 不更新名称
System.out.println("更新图片开始:" + "http://oss-img.yangbuyi.top/github.png");
File file2 = new File("F:\\美女图片\\httpsimg2020.cnblogs.comblog17352552020081735255-20200805220326890-2058657956.jpg");
String jpg1 = OSSUploadUtil.updateFile(file2, "jpg", "http://oss-img.yangbuyi.top/github.png");
System.out.println("更新后的:" + jpg1); // 删除 根据url 删除图片
// boolean b = OSSUploadUtil.deleteFile("https://yangbuyi.oss-cn-beijing.aliyuncs.com/imgBAA8AD5484D847E09BDB535765A9EEB9.jpg");
// System.out.println(b); } }

看到这 是不是觉得 超级简单 就CV大法。。

给到的项目地址 有不同oss实现 本文章只讲了 OSSuploadUtil 对应的测试类为 two.java

项目地址: https://gitee.com/yangbuyi/ossAlibaba

项目地址: https://gitee.com/yangbuyi/ossAlibaba

项目地址: https://gitee.com/yangbuyi/ossAlibaba

项目地址: https://gitee.com/yangbuyi/ossAlibaba

本章节oss文件上传结束,如有问题评论区见.

最新文章

  1. webapi frombody fromuri的参数绑定规则
  2. Atitit &#160;rgb yuv &#160;hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别
  3. Cheatsheet: 2016 02.01 ~ 02.29
  4. spring tx:advice 和 aop:config 配置事务
  5. SQL Sever 2008 数据库文件的备份和还原
  6. nginx查看日志
  7. 2013.08.23.diary
  8. DH11数字温湿度传感器
  9. 高级项目 它 集群环境建设(两)MySQL簇
  10. 201521123017 《Java程序设计》第6周学习总结
  11. Java中使用LocalDate根据日期来计算年龄
  12. kali系统教程:创建热点
  13. Android中怎样获取SD卡路径
  14. CTF杂项之音频隐写
  15. ThreadPoolExecutor源码详解
  16. 聊聊Python中的闭包和装饰器
  17. Python基本数据类型——字典
  18. CentOS部署PHP环境
  19. python-windows下将单个py文件生成exe
  20. Http缓存知识;HTTPS, HTTP2相关知识;百度统计和即时线上客服。

热门文章

  1. SW算法求全局最小割(Stoer-Wagner算法)
  2. 三面拿杭州研究院50offer:面对这些问题,你都能做到嘛??
  3. SQL之DDL、DML、DCL、TCL
  4. windows系统远程修改密码
  5. 第二节:Centos下安装Tomcat8.5.57
  6. pip安装第三方包超时
  7. 一个简单的Android小实例分享,包含recycleView与recyclerView嵌套
  8. 《Python编程初学者指南》高清PDF版|百度网盘免费下载|Python基础
  9. PHP系列之钩子
  10. 架构师写的BUG,非比寻常