oss的简单使用(已实现图片、视频的成功上传)
需要导入的dependency
后两个依赖主要是用于实现Bucket的创建以及文件的上传
1 <dependency> 2 <groupId>com.aliyun.oss</groupId> 3 <artifactId>aliyun-sdk-oss</artifactId> 4 <version>3.10.2</version> 5 </dependency> 6 <dependency> 7 <groupId>commons-io</groupId> 8 <artifactId>commons-io</artifactId> 9 <version>1.3.2</version> 10 </dependency> 11 <dependency> 12 <groupId>commons-fileupload</groupId> 13 <artifactId>commons-fileupload</artifactId> 14 <version>1.2.1</version> 15 </dependency>
加载完相关依赖后,便可以通过创建OSSClient对象调用相关接口实现相关功能啦.
注意:在没有绑定私有域名的情况下,文件上传成功后返回的url只能是下载链接...
代码如下: 1 package com.aliyun.oss;
2 3 import com.aliyun.oss.model.CannedAccessControlList; 4 import com.aliyun.oss.model.CreateBucketRequest; 5 import com.aliyun.oss.model.MultipartUpload; 6 import org.springframework.util.StreamUtils; 7 import org.springframework.util.StringUtils; 8 import org.springframework.web.multipart.MultipartFile; 9 10 import java.io.ByteArrayInputStream; 11 import java.io.IOException; 12 import java.text.SimpleDateFormat; 13 import java.util.Date; 14 import java.util.UUID; 15 16 public class OssUtil { 17 //定义外网访问的参数 --地域节点 18 private static String EndPoint = "oss-cn-zhangjiakou.aliyuncs.com"; 19 private static String AccessKeyID = "XXXXXXX"; 20 private static String AccessKeySecret = "XXXXXXX"; 21 private static String BucketName = "tiandankanfeng"; //仓库名称 22 private static String SufferUrl = "http://tiandankanfeng.oss-cn-zhangjiakou.aliyuncs.com/"; //文件上传成功后返回的路径,类似二级域名 23 private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //格式化时间 24 25 public OSSClient getOSSClient(){ 26 //创建一个OSSClient对象 27 OSSClient ossClient = new OSSClient(EndPoint,AccessKeyID,AccessKeySecret); 28 if(ossClient.doesBucketExist(BucketName)) { 29 System.out.println("success"); 30 //关闭oss的连接 此处不要关闭,后面会调用,不然会报错 31 }else { //通过api接口来创建bucket 32 System.out.println("fail to find ,so to get a new one"); 33 //创建一个oss仓库 34 CreateBucketRequest bucketRequest = new CreateBucketRequest(null); 35 bucketRequest.setBucketName(BucketName); 36 bucketRequest.setCannedACL(CannedAccessControlList.PublicRead); //设置访问权限 --公共读 37 ossClient.createBucket(bucketRequest); //映射原理,会重新生成一个ossClient并覆盖当前的ossClient 38
39 } 40 return ossClient; 41 } 42 43 /** 44 * 上传文件 45 * @param multipartFile 需要上传的文件 46 * @param fileType 文件类型 47 * @return 48 */ 49 public String uploadDocuments(MultipartFile multipartFile, String fileType) throws IOException { 50 //获取oss连接 51 OSSClient ossClient = this.getOSSClient(); 52 //获取文件的后缀名称 53 String ext = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf(".")); 54 String fileName = getFileName(fileType, ext); 55 String url = null; 56 //通过ossclient获取上传文件后返回的url 57 ossClient.putObject(BucketName,fileName,new ByteArrayInputStream(multipartFile.getBytes())); 58 url = SufferUrl+fileName; 59 System.out.println("------>>上传文件成功,url:"+url); 60 ossClient.shutdown();
61 return url;
62 } 63 64 private String getFileName(String fileType, String ext) { 65 //上传至oss的那个文件夹 通过filename来指定 生成规则 // www.liangye123.com/img/20200814/jdg.png 66 String date = sdf.format(new Date()); 67 if(StringUtils.isEmpty(fileType)){ 68 fileType = "default"; 69 } 70 //为了避免图片重名,使用UUID来命名图片 71 String uuid = UUID.randomUUID().toString().replace("-",""); 72 //组合filename 73 String filename = fileType+"/"+date+"/"+uuid+ext; 74 return filename; 75 } 76 77 public static void main(String[] args) { 78 OssUtil ou = new OssUtil(); 79 ou.getOSSClient(); 80 } 81 }
测试类:
1 package com.aliyun.oss; 2 3 import org.junit.jupiter.api.Test; 4 import org.springframework.mock.web.MockMultipartFile; 5 import org.springframework.web.multipart.MultipartFile; 6 7 import java.io.File; 8 import java.io.FileInputStream; 9 10 import static org.junit.jupiter.api.Assertions.*; 11 12 class OssUtilTest { 13 14 @Test 15 void getOSSClient() { 16 } 17 18 @Test 19 void uploadDocuments() throws Exception{ 20 assert(true); 21 File file = new File("H:/desktop/个人image/个人image/宽图/a2c1f-wemjb.jpg"); 22 FileInputStream in_file= new FileInputStream(file); 23 //File与MutipartFile的转化 24 MultipartFile multipartFile = new MockMultipartFile("a2c1f-wemjb.jpg","a2c1f-wemjb.jpg","jpeg",in_file); 25 String url = new OssUtil().uploadDocuments(multipartFile,"jpg"); 26 } 27 }
测试结果:
啊,图片应该不违规吧 QAQ
身是红尘雨中客,
愿有执伞并肩人.