博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java操作阿里云的对象存储OSS
阅读量:7211 次
发布时间:2019-06-29

本文共 7595 字,大约阅读时间需要 25 分钟。

官网:: 

以下博客简单介绍连接阿里云的OSS,新建Bucket,删除Bucket,向阿里云的OSS存储中存储单个文件,获取单个文件,删除单个文件等功能。

Api:: 

以下为pom依赖:

com.aliyun.oss
aliyun-sdk-oss
2.2.1
下载地址:

下边为oss的配置文件oss.properties,也可以直接写入代码:

endpoint=oss-cn-beijing.aliyuncs.comaccessKeyId=您的keyaccessKeySecret=您的secret
注endpoint为:OSS外网域名或OSS内网域名去掉您的Bucket.后

OSS的操作代码:

package my.demo.java.z.aliyun.oss;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.PropertyResourceBundle;import java.util.ResourceBundle;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.aliyun.oss.OSSClient;import com.aliyun.oss.model.Bucket;import com.aliyun.oss.model.OSSObject;import com.aliyun.oss.model.ObjectMetadata;import com.aliyun.oss.model.PutObjectResult;public class OSSUnit {		//log	private static final Logger LOG = LoggerFactory.getLogger(OSSUnit.class);		//阿里云API的内或外网域名	private static String ENDPOINT;	//阿里云API的密钥Access Key ID	private static String ACCESS_KEY_ID;	//阿里云API的密钥Access Key Secret	private static String ACCESS_KEY_SECRET;		//init static datas	static{		ResourceBundle bundle = PropertyResourceBundle.getBundle("properties.oss");		ENDPOINT = bundle.containsKey("endpoint") == false ? "" : bundle.getString("endpoint");		ACCESS_KEY_ID = bundle.containsKey("accessKeyId") == false? "" : bundle.getString("accessKeyId");		ACCESS_KEY_SECRET = bundle.containsKey("accessKeySecret") == false ? "" : bundle.getString("accessKeySecret");	}		/**	 * 获取阿里云OSS客户端对象	 * */	public static final OSSClient getOSSClient(){		return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);	}		/**	 * 新建Bucket  --Bucket权限:私有	 * @param bucketName bucket名称	 * @return true 新建Bucket成功	 * */	public static final boolean createBucket(OSSClient client, String bucketName){		Bucket bucket = client.createBucket(bucketName); 		return bucketName.equals(bucket.getName());	}		/**	 * 删除Bucket 	 * @param bucketName bucket名称	 * */	public static final void deleteBucket(OSSClient client, String bucketName){		client.deleteBucket(bucketName); 		LOG.info("删除" + bucketName + "Bucket成功");	}		/**	 * 向阿里云的OSS存储中存储文件  --file也可以用InputStream替代	 * @param client OSS客户端	 * @param file 上传文件	 * @param bucketName bucket名称	 * @param diskName 上传文件的目录  --bucket下文件的路径	 * @return String 唯一MD5数字签名	 * */	public static final String uploadObject2OSS(OSSClient client, File file, String bucketName, String diskName) {		String resultStr = null;		try {			InputStream is = new FileInputStream(file);			String fileName = file.getName();			Long fileSize = file.length();			//创建上传Object的Metadata			ObjectMetadata metadata = new ObjectMetadata();			metadata.setContentLength(is.available());			metadata.setCacheControl("no-cache");			metadata.setHeader("Pragma", "no-cache");			metadata.setContentEncoding("utf-8");			metadata.setContentType(getContentType(fileName));			metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");			//上传文件 			PutObjectResult putResult = client.putObject(bucketName, diskName + fileName, is, metadata);			//解析结果			resultStr = putResult.getETag();		} catch (Exception e) {			LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);		}		return resultStr;	}	    /**      * 根据key获取OSS服务器上的文件输入流 	 * @param client OSS客户端 	 * @param bucketName bucket名称 	 * @param diskName 文件路径 	 * @param key Bucket下的文件的路径名+文件名     */       public static final InputStream getOSS2InputStream(OSSClient client, String bucketName, String diskName, String key){ 		OSSObject ossObj = client.getObject(bucketName, diskName + key);		return ossObj.getObjectContent();	     }  	   /**     * 根据key删除OSS服务器上的文件   	* @param client OSS客户端  	* @param bucketName bucket名称  	* @param diskName 文件路径  	* @param key Bucket下的文件的路径名+文件名    */  	  public static void deleteFile(OSSClient client, String bucketName, String diskName, String key){  	  	client.deleteObject(bucketName, diskName + key); 	  	LOG.info("删除" + bucketName + "下的文件" + diskName + key + "成功");	  }           /**      * 通过文件名判断并获取OSS服务文件上传时文件的contentType      * @param fileName 文件名     * @return 文件的contentType        */       public static final String getContentType(String fileName){      	String fileExtension = fileName.substring(fileName.lastIndexOf("."));    	if("bmp".equalsIgnoreCase(fileExtension)) return "image/bmp";    	if("gif".equalsIgnoreCase(fileExtension)) return "image/gif";    	if("jpeg".equalsIgnoreCase(fileExtension) || "jpg".equalsIgnoreCase(fileExtension)  || "png".equalsIgnoreCase(fileExtension) ) return "image/jpeg";    	if("html".equalsIgnoreCase(fileExtension)) return "text/html";    	if("txt".equalsIgnoreCase(fileExtension)) return "text/plain";    	if("vsd".equalsIgnoreCase(fileExtension)) return "application/vnd.visio";    	if("ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) return "application/vnd.ms-powerpoint";    	if("doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) return "application/msword";    	if("xml".equalsIgnoreCase(fileExtension)) return "text/xml";        return "text/html";       }  }

代码对应测试代码junit如下:

package my.demo.java.z.aliyun.oss;import static org.junit.Assert.assertEquals;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import org.junit.Before;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.aliyun.oss.OSSClient;public class OSSUnitTest {		//log	private static final Logger LOG = LoggerFactory.getLogger(OSSUnitTest.class);		private OSSUnit ossunit = null;	private OSSClient client = null;	private String bucketName = "oss-test-my";	@Before	public void initUnit(){		ossunit = new OSSUnit();		client = OSSUnit.getOSSClient();	}	@Test	public void testCreateBucket() {		String bucketName = "oss-test-my";		//创建bucket		assertEquals(true, OSSUnit.createBucket(client, bucketName));	}		@Test	public void testDeleteBucket(){		String bucketName = "oss-test-my";		//删除bucket		OSSUnit.deleteBucket(client, bucketName);		//console log :删除oss-test-myBucket成功	}		@Test	public void testUploadObject2OSS(){		//上传文件		String flilePathName = "C:/Users/Tony_tian/Desktop/csdnimg/preossimg.jpg";		File file = new File(flilePathName);		String diskName = "datas/image/";		String md5key = OSSUnit.uploadObject2OSS(client, file, bucketName, diskName);		LOG.info("上传后的文件MD5数字唯一签名:" + md5key);  //上传后的文件MD5数字唯一签名:A30B046A34EB326C4A3BBD784333B017	}		@Test	public void testGetOSS2InputStream(){		//获取文件		try {			BufferedInputStream bis = new BufferedInputStream(OSSUnit.getOSS2InputStream(client, bucketName, "datas/image/", "preossimg.jpg"));			String resfile = "C:/Users/Tony_tian/Desktop/csdnimg/preossimg_res.jpg";			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(resfile)));			int itemp = 0;			while((itemp = bis.read()) != -1){				bos.write(itemp);			}			LOG.info("文件获取成功"); //console log :文件获取成功			bis.close();			bos.close();		} catch (Exception e) {			LOG.error("从OSS获取文件失败:" + e.getMessage(), e);		}	}		@Test	public void testDeleteFile(){		//注:文件夹下只有一个文件,则文件夹也会一起删除;如果多个文件,只会删除指定文件名的文件		//删除文件		OSSUnit.deleteFile(client, bucketName, "datas/image/", "preossimg.jpg");		//console log : 删除oss-test-my下的文件datas/image/preossimg.jpg成功	}}
部分效果图:

新建Bucket(Bucket权限:私有,公开需手动设置)前后和删除Bucket:

上传文件前后即删除文件:

注:文件夹下只有一个文件,则文件夹也会一起删除;如果多个文件,只会删除指定文件名的文件

上边记录为私有文件的获取,如果要获取“Bucket权限:公共读”的就很简单了:

			
Aliyun-OSS
Bucket权限:公共读的图片:
打开效果:

你可能感兴趣的文章
基于鲁棒图进行概念架构设计
查看>>
Permission denied: exec of '/var/www/html/bugzilla/index.cgi' failed
查看>>
LESS CSS 框架简介与使用
查看>>
2014.09线上课堂报名帖:敏捷个人手机应用使用
查看>>
C# 重启exe
查看>>
Web 服务器 之 简易WWW服务器的架设
查看>>
一种电子病历系统软件框架思想
查看>>
轻松破解NewzCrawler时间限制
查看>>
gDebugger 3.1.1 原版+破解
查看>>
C++ 对象的内存布局(上)
查看>>
在Outlook中用VBA导出HTML格式邮件
查看>>
搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门
查看>>
PHP——通过下拉列表选择时间(转)
查看>>
由1433端口入侵,浅谈sqlserver安全 (转)
查看>>
2个YUV视频拼接技术
查看>>
spring data实现自定义的repository实现类,实现跟jpa联通
查看>>
“惊群”,看看nginx是怎么解决它的
查看>>
Theano3.3-练习之逻辑回归
查看>>
利用RGB-D数据进行人体检测 带dataset
查看>>
live555的编译及使用
查看>>