【OSS】Bucket读写权限

用户创建的Bucket总共有三种权限:

/*私有
 * 只允许自己读写操作,其他用户没有权限
 */
CannedAccessControlList acl_private = CannedAccessControlList.Private;
		
/*公共读写
 * 允许自己和其他用户读写操作
 */
CannedAccessControlList acl_pub_readwrite = CannedAccessControlList.PublicReadWrite;
		
/*公共读
 * 只允许自己进行写操作,但是允许自己及其他用户进行读操作
 */
CannedAccessControlList acl_pub_red = CannedAccessControlList.PublicRead;

测试demo

 

package com.ls;

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 com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;

/**文件读写权限测试,需要两个账号
 */
public class OSSAccessExample {
	/*公司账号*/
	private static final String ACCESS_ID1 = "*******************";
	private static final String ACCESS_KEY1 = "************************";

	/*自己账号*/
	private static final String ACCESS_ID2 = "***************";
	private static final String ACCESS_KEY2 = "**********************";

	private static final String OSS_ENDPOINT = "http://oss.aliyuncs.com/";

	public static void main(String[] args) {
		
		// 初始化OSS客户端
		OSSClient client1 = new OSSClient(OSS_ENDPOINT, ACCESS_ID1, ACCESS_KEY1);
		OSSClient client2 = new OSSClient(OSS_ENDPOINT, ACCESS_ID2, ACCESS_KEY2);

		// key1创建名为saas01的BUCKET,权限为私有
		createBucket(client1, "saas01", CannedAccessControlList.Private);

		// key2创建名为saas02的BUCKET,权限为公用读写
		createBucket(client2, "saas02", CannedAccessControlList.PublicReadWrite);

		// key1创建名为saas03的BUCKET,权限为公用读
		createBucket(client1, "saas03", CannedAccessControlList.PublicRead);
		
		/*上传文件*/
		
		String bucketName1 = "saas01";
		String key1 = "索隆Q版.jpg";
		String uploadFilePath1 = "G:/test/索隆Q版.jpg";
		
		String bucketName2 = "saas02";
		String key2 = "女帝.jpg";
		String uploadFilePath2 = "G:/test/女帝.jpg";
		
		String bucketName3 = "saas03";
		String key3 = "启动日志.txt";
		String uploadFilePath3 = "G:/test/启动日志.txt";
		
		
		try {
			/*对各自的bucket操作,都有权限*/
			System.out.println("正在上传...");
			uploadFile(client1, bucketName1, key1, uploadFilePath1);
			uploadFile(client2, bucketName2, key2, uploadFilePath2);
			uploadFile(client1, bucketName3, key3, uploadFilePath3);
		} catch (OSSException e) {
			e.printStackTrace();
		} catch (ClientException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		System.out.println("上传私有...");
		try {
			uploadFile(client2, bucketName1, key1+"(上传私有)", uploadFilePath1);		
		} catch (Exception e) {
			System.out.println(e.getMessage());//无写入权限,抛出异常
		}
		
		System.out.println("上传只读...");
		try {
			uploadFile(client2, bucketName3, key3+"(上传只读)", uploadFilePath3);
		} catch (Exception e) {
			System.out.println(e.getMessage());//无写入权限,抛出异常
		}
		
		System.out.println("上传公共读写...");
		try {
			uploadFile(client1, bucketName2, key2+"(上传公共读写)", uploadFilePath2);
		} catch (Exception e) {
			System.out.println(e.getMessage());//成功上传,无异常
		}

		
		List<Bucket> list1 = new ArrayList<Bucket>();
		list1 = client1.listBuckets();
		System.out.println("client1:" + client1.toString());
		for (Bucket a : list1) {
			System.out.println("client1 info:" + a.toString());
		}
		
		list1 = client2.listBuckets();
		System.out.println("client2:" + client2.toString());
		for (Bucket a : list1) {
			System.out.println("client2 info:" + a.toString());
		}
		
		/*自己下载自己的*/
		System.out.println("正在下载(自己下载自己的)...");
        downloadFile(client1, bucketName1, key1, "G:/test/download/"+key1);
        downloadFile(client2, bucketName2, key2, "G:/test/download/"+key2);
        downloadFile(client1, bucketName3, key3, "G:/test/download/"+key3);
        
        /*下载私有的*/
        System.out.println("正在下载(下载私有)...");
        try {
        	downloadFile(client2, bucketName1, key1, "G:/test/download/(下载私有)"+key1);
		} catch (Exception e) {
			 System.out.println(e.getMessage());//此处会抛出异常,无权限下载
		}
           
        System.out.println("正在下载(下载只读)...");
        try {
        	downloadFile(client2, bucketName3, key3, "G:/test/download/(下载只读)"+key3);
		} catch (Exception e) {
			System.out.println(e.getMessage());//成功下载
		}
        
        
        System.out.println("正在下载(下载公共读写)...");
        try {
        	downloadFile(client1, bucketName2, key2, "G:/test/download/(下载公共读写)"+key2);
		} catch (Exception e) {
			System.out.println(e.getMessage());//成功下载
		}
		
		client1.shutdown();
		client2.shutdown();
		System.out.println("-----------------------SUCCESS----------------------");
	}

	public static void createBucket(OSSClient client, String bucketName,
			CannedAccessControlList acl) {

		/* 通过一个Bucket对象来创建 */
		CreateBucketRequest bucketObj = new CreateBucketRequest(null);// 构造函数入参为Bucket名称,可以为空
		bucketObj.setBucketName(bucketName);// 设置bucketObj名称
		bucketObj.setCannedACL(acl);// 设置bucketObj访问权限acl
		client.createBucket(bucketObj);// 创建Bucket

	}

	// 上传文件
	private static void uploadFile(OSSClient client, String bucketName,
			String key, String filename) throws OSSException, ClientException,
			FileNotFoundException {
		File file = new File(filename);

		ObjectMetadata objectMeta = new ObjectMetadata();
		objectMeta.setContentLength(file.length());
		// 可以在metadata中标记文件类型
		//objectMeta.setContentType("image/jpeg");

		InputStream input = new FileInputStream(file);
		PutObjectResult rs = client.putObject(bucketName, key, input,
				objectMeta);
	}

	// 下载文件
	private static void downloadFile(OSSClient client, String bucketName,
			String key, String filename) throws OSSException, ClientException {
		client.getObject(new GetObjectRequest(bucketName, key), new File(
				filename));
	}

}


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值