Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

SinaCloudStorage/SinaStorage-SDK-Java

Open more actions menu

Repository files navigation

#SinaStorage SDKBuild Status

##概述 新浪云存储Java平台SDK为第三方应用提供了简单易用的API调用服务,使第三方客户端无需了解复杂的验证机制即可进行授权、上传、下载等文件操作。您可以通过Maven进行构建本项目或下载独立的zip格式文件包

##SDK 环境要求

Java 1.5+

依赖库

  • commons-codec-1.3
  • commons-logging-1.1.1
  • httpclient-4.2

##目录说明 项目由Maven构建而成,每个子目录作为一个子项目存在。同步项目源码后,可以在本地通过‘mvn package’命令对项目进行编译、打包。

子目录 说明
scs-java-sdk-core SCS JAVA SDK核心库
scs-java-sdk SDK主要业务实现
scs-android-sdk 用于生成Android SDK jar包
scs-java-cli CLI命令工具
cs-java-sdk-distribution 用于生成java sdk jar包

##快速上手

###1.创建bucket访问对象:

  • 代码中设置你的accessKey和secretKey:

      import com.sina.cloudstorage.auth.AWSCrentials;
      import com.sina.cloudstorage.auth.BasicAWSCredentials;
      import com.sina.cloudstorage.services.scs.SCS;
      import com.sina.cloudstorage.services.scs.SCSClient;
      
      String accessKey = "你的accessKey";
      String secretKey = "你的secretKey";
      AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
      SCS conn = new SCSClient(credentials);
    
  • 配置文件设置你的accessKey和secretKey

    在根目录下,创建配置文件:SCSCredentials.properties,内容为:

      accessKey=你的accessKey
      secretKey=你的secretKey
    

    创建对象

      import com.sina.cloudstorage.services.scs.SCS;
      import com.sina.cloudstorage.services.scs.SCSClient;
      
      SCS conn = new SCSClient();
    

###2.bucket 操作:

  • 列出所有bucket:

      /**
       * 获取所有bucket
       */
      public void getAllBuckets(){
      	List<Bucket> list = conn.listBuckets();
      	System.out.println("====getAllBuckets===="+list);
      }
    
  • 创建bucket:

      /**
       * 创建bucket
       */
      public void createBucket(){
      	Bucket bucket = conn.createBucket("bucket-name");
      	System.out.println(bucket);
      }
    
  • 删除bucket:

      /**
       * 删除bucket
       */
      public void deleteBucket(){
      	conn.deleteBucket("create-a-bucket");
      }
    
  • 获取bucket ACL:

      /**
       * 获取bucket ACL
       */
      public void getBucketAcl(){
      	AccessControlList acl = conn.getBucketAcl("create-a-bucket");
      	System.out.println(acl);
      }
    
  • 设置bucket ACL:

      /**
       * 设置bucket acl
       */
      public void putBucketAcl(){
      	AccessControlList acl = new AccessControlList();
      	acl.grantPermissions(UserIdGrantee.CANONICAL, Permission.Read, Permission.ReadAcp);
      	acl.grantPermissions(UserIdGrantee.ANONYMOUSE, 
      						Permission.ReadAcp,
      						Permission.Write,
      						Permission.WriteAcp);
      	acl.grantPermissions(new UserIdGrantee("UserId"), 
      						Permission.Read,
      						Permission.ReadAcp,
      						Permission.Write,
      						Permission.WriteAcp);
      	
      	conn.setBucketAcl("create-a-bucket", acl);
      }
    
  • 列bucket中所有文件:

      /**
       * 列bucket中所有文件
       */
      public void listObjects(){
      	ObjectListing objectListing = conn.listObjects("test");
      	System.out.println(objectListing);
      }
    

###3.object 操作:

  • 获取文件信息:

      /**
       * 获取object metadata
       */
      public void getObjectMeta(){
      	ObjectMetadata objectMetadata = conn.getObjectMetadata("bucket-name", "/test/file.txt");
      	System.out.println(objectMetadata.getUserMetadata());
      	System.out.println(objectMetadata.getContentLength());
      	System.out.println(objectMetadata.getRawMetadata());
      	System.out.println(objectMetadata.getETag());
      }
    
  • 下载文件:

      /**
       * 下载object 
    	 *	//断点续传
       *	GetObjectRequest rangeObjectRequest = new GetObjectRequest("test11", "/test/file.txt");
       *	rangeObjectRequest.setRange(0, 10); // retrieve 1st 10 bytes.
       *	S3Object objectPortion = conn.getObject(rangeObjectRequest);
       *			
       *	InputStream objectData = objectPortion.getObjectContent();
       *	// "Process the objectData stream.
       *	objectData.close();
       */
      public void getObject(){
      	//SDKGlobalConfiguration.setGlobalTimeOffset(-60*5);//自定义全局超时时间5分钟以后(可选项)
      	S3Object s3Obj = conn.getObject("test11", "/test/file.txt");
      	InputStream in = s3Obj.getObjectContent();
      	byte[] buf = new byte[1024];
      	OutputStream out = null;
      	try {
      		out = new FileOutputStream(new File("dage1.txt"));
      		int count;
      		while( (count = in.read(buf)) != -1)
      		{
      		   if( Thread.interrupted() )
      		   {
      		       throw new InterruptedException();
      		   }
      		   out.write(buf, 0, count);
      		}
      	} catch (FileNotFoundException e) {
      		e.printStackTrace();
      	} catch (IOException e) {
      		e.printStackTrace();
      	} catch (InterruptedException e) {
      		e.printStackTrace();
      	}finally{
      		//SDKGlobalConfiguration.setGlobalTimeOffset(0);//还原超时时间
      		try {
      			out.close();
      		} catch (IOException e) {
      			e.printStackTrace();
      		}
      		try {
      			in.close();
      		} catch (IOException e) {
      			e.printStackTrace();
      		}
      	}
      }
    
  • 上传文件:

      /**
       * 上传文件
       */
      public void putObject(){
      	PutObjectResult putObjectResult = conn.putObject("bucket名称",
      										"文件上传路径", new File("本地文件"));
      	System.out.println(putObjectResult);
      }
      
      
      
      /**
       * 上传文件--进度回调方法
       */
      public void putObject(){	
      	PutObjectRequest por = new PutObjectRequest("bucket名称", "文件上传路径", 
      			new File("本地文件")).withMetadata(new ObjectMetadata());
      	por.setGeneralProgressListener(new ProgressListener() {
      		@Override
      		public void progressChanged(ProgressEvent progressEvent) {
      			// TODO Auto-generated method stub
      			System.out.println(progressEvent);
      		}
      	});
      	
      	PutObjectResult putObjectResult = conn.putObject(por);
      	System.out.println(putObjectResult);
      	
      }
    
  • 上传文件(自定义请求头):

      /**
       * 上传文件 自定义请求头
       */
      public void putObjectWithCustomRequestHeader(){
      	//自定义请求头k-v
      	Map<String, String> requestHeader = new HashMap<String, String>();
      	requestHeader.put("x-sina-additional-indexed-key", "stream/test111.txt");
      	PutObjectResult putObjectResult = conn.putObject("bucket名称", "ssk/a/", 
      										              new File("本地文件"), requestHeader);
      	System.out.println(putObjectResult);//服务器响应结果
      }
    
  • 秒传文件:

      /**
       * 秒传
       */
      public void putObjectRelax(){
      	conn.putObjectRelax("bucket名称","文件上传路径","被秒传文件的sina_sha1值",被秒传文件的长度);
      }
    
  • 复制文件:

      /**
       * 拷贝object
       */
      public void copyObject(){
      	conn.copyObject("源bucket名称", "源文件路径", "目标bucket名称", "目标文件路径");
      }
    
  • 修改文件meta信息:

      /**
       * 设置object metadata
       */
      @SuppressWarnings("serial")
      public void putObjectMeta(){
      	ObjectMetadata objectMetadata = new ObjectMetadata();
      	objectMetadata.setUserMetadata(new HashMap<String,String>(){{
      				put("aaa","1111");
      				put("bbb","222");
      				put("ccc","3333");
      				put("asdfdsaf","vvvvvv");
      	}});
      	conn.setObjectMetadata("bucket名称", "文件路径", objectMetadata);
      }
    
  • 删除文件:

      /**
       * 删除Object
       */
      public void deleteObject(){
      	conn.deleteObject("bucket名称", "文件路径");
      }		
    
  • 获取文件acl信息:

      /**
       * 获取object acl
       */
      public void getObjectAcl(){
      	AccessControlList acl = conn.getObjectAcl("bucket名称", "文件路径");
      	System.out.println(acl);
      }
    
  • 修改文件acl信息:

      /**
       * 设置object acl
       */
      public void putObjectAcl(){
      	AccessControlList acl = new AccessControlList();
      	acl.grantPermissions(UserIdGrantee.CANONICAL, Permission.Read,Permission.ReadAcp);
      	acl.grantPermissions(UserIdGrantee.ANONYMOUSE,Permission.ReadAcp,Permission.Write,Permission.WriteAcp);
      	acl.grantPermissions(new UserIdGrantee("UserId"), Permission.Read,Permission.ReadAcp,Permission.Write,Permission.WriteAcp);
      	
      	conn.setObjectAcl("bucket名称", "文件路径", acl);
      }
    
  • 分片上传文件:

      /**
       * 分片上传文件
       * @throws Exception
       */
      public void multipartsUpload() throws Exception{
      	//初始化上传任务
      	InitiateMultipartUploadResult initiateMultipartUploadResult = conn.initiateMultipartUpload("bucket名称", "文件路径");
      	
      	if(initiateMultipartUploadResult!=null){
      		//分片上传
      		List<PartETag> partETags = null;
      		PutObjectRequest putObjectRequest = new PutObjectRequest(initiateMultipartUploadResult.getBucketName(),
      				initiateMultipartUploadResult.getKey(), new File("本地待上传文件"));
      		 try {
      			long optimalPartSize = 5 * 1024 * 1024; //分片大小5M
                  UploadPartRequestFactory requestFactory = new UploadPartRequestFactory(putObjectRequest, initiateMultipartUploadResult.getUploadId()
                  		, optimalPartSize);
      
                  partETags = uploadPartsInSeries(requestFactory);
              } catch (Exception e) {
                  throw e;
              } finally {
                  if (putObjectRequest.getInputStream() != null) {
      				try {
      					putObjectRequest.getInputStream().close();
      				} catch (Exception e) {
      					throw e;
      				}
                  }
              }
      	
      		 //分片列表
      		PartListing partList = conn.listParts(new ListPartsRequest(initiateMultipartUploadResult.getBucketName(),
      										initiateMultipartUploadResult.getKey(),
      										initiateMultipartUploadResult.getUploadId()));
      		System.out.println("已上传的文件分片列表:\n"+partList);
      		
      		//分片合并,完成上传
      		ObjectMetadata objectMetadata = conn.completeMultipartUpload(new CompleteMultipartUploadRequest(putObjectRequest.getBucketName(),
      				putObjectRequest.getKey(), initiateMultipartUploadResult.getUploadId(), partETags));
      		
      		System.out.println("合并文件结果:\n");
      		System.out.println(objectMetadata.getUserMetadata());
      		System.out.println(objectMetadata.getContentLength());
      		System.out.println(objectMetadata.getRawMetadata());
      		System.out.println(objectMetadata.getETag());
      	}
      	
      }
    
  • 高级工具 TransferManager

      /* TransferManager */
      public void putObjectByTransferManager(){
      	TransferManager tf = new TransferManager(conn);
      	Upload myUpload = tf.upload("bucket名称", "文件路径", new File("待上传文件本地路径"));
      	
      	// You can poll your transfer's status to check its progress
      	if (myUpload.isDone() == false) {
      		System.out.println("Transfer: " + myUpload.getDescription());
      		System.out.println("  - State: " + myUpload.getState());
      		System.out.println("  - Progress: "
      				+ myUpload.getProgress().getBytesTransferred());
      	}
    
      	// Transfers also allow you to set a <code>ProgressListener</code> to
      	// receive
      	// asynchronous notifications about your transfer's progress.
      	myUpload.addProgressListener(new ProgressListener(){
      		@Override
      		public void progressChanged(ProgressEvent progressEvent) {
      			System.out.println(progressEvent);
      		}
      	});
    
      	// Or you can block the current thread and wait for your transfer to
      	// to complete. If the transfer fails, this method will throw an
      	// SCSClientException or SCSServiceException detailing the reason.
      	try {
      		myUpload.waitForCompletion();
      	} catch (SCSServiceException e) {
      		e.printStackTrace();
      	} catch (SCSClientException e) {
      		e.printStackTrace();
      	} catch (InterruptedException e) {
      		e.printStackTrace();
      	}
      	
      }
    

###3.URL签名工具:

  • 含签名信息URL:

      /* 生成url*/
      public void generateUrl(){
      	Date expiration = new Date();		//过期时间
          long epochMillis = expiration.getTime();
          epochMillis += 60*5*1000;
          expiration = new Date(epochMillis);   
          
      	URL presignedUrl = conn.generatePresignedUrl("bucket名称", "文件路径", expiration, false);
      	System.out.println(presignedUrl);
      }
    

About

Java SDK For 新浪云存储

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.