Java操作aliyun-OSS对象存储
2016-09-02 10:46
344 查看
官网https://www.aliyun.com/product/oss第一句话:
“对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全和高可靠的云存储服务。RESTFul API的平台无关性,容量和处理能力的弹性扩展,按实际容量付费真正使您专注于核心业务。”
当项目在使用的过程中会产生一些文件并需要存储,而自己的服务器容量不足够大来存储这些文件,这个时候就可以选择阿里云的对象存储服务。当然这是我的使用场景,你也可以参考官网的使用场景。
使用前提在“快速入门”里写得有,你需要开通服务并创建资源空间。
使用方法SDK手册中已经写得非常清楚了:https://help.aliyun.com/document_detail/32015.html?spm=5176.doc32013.6.305.MD4X5m
“在OSS中,用户操作的基本数据单元是文件(Object)。OSS Java SDK提供了丰富的文件上传接口,可以通过以下方式上传文件:
1.流式上传
2.文件上传
3.追加上传
4.分片上传
5.断点续传上传”
我采用的是文件上传方式:
需要的jar包
首先你需要一个OSSClient,里面的keyId以及keySecret是你在开通服务的时候获得的;OSS是没有文件夹这个概念的,所有元素都是以Object来存储,代码中的myKey或keys是你上传的Object的完整的键名称,比如你上传到 test/myWord/new.doc 里面,那么你的myKey就是“test/myWord/new.doc”,不管你本地的文件名称是什么,上传到云端之后的对象名称就是你的myKey的名称;OSS允许用户自定义Http header,在上传文件的方法中,设置了上传内容类型以及上传文件长度,之前看到一篇文章,是说这个云服务是按照量来计费的,所以需要告知它你要上传的内容长度,但是如果我不设置长度,貌似也能上传成功,原因还不清楚:
在上传文件的时候,你需要先创建OSSClient实例,然后调用上传文件的方法。
“对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全和高可靠的云存储服务。RESTFul API的平台无关性,容量和处理能力的弹性扩展,按实际容量付费真正使您专注于核心业务。”
当项目在使用的过程中会产生一些文件并需要存储,而自己的服务器容量不足够大来存储这些文件,这个时候就可以选择阿里云的对象存储服务。当然这是我的使用场景,你也可以参考官网的使用场景。
使用前提在“快速入门”里写得有,你需要开通服务并创建资源空间。
使用方法SDK手册中已经写得非常清楚了:https://help.aliyun.com/document_detail/32015.html?spm=5176.doc32013.6.305.MD4X5m
“在OSS中,用户操作的基本数据单元是文件(Object)。OSS Java SDK提供了丰富的文件上传接口,可以通过以下方式上传文件:
1.流式上传
2.文件上传
3.追加上传
4.分片上传
5.断点续传上传”
我采用的是文件上传方式:
需要的jar包
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>2.2.3</version> </dependency>
首先你需要一个OSSClient,里面的keyId以及keySecret是你在开通服务的时候获得的;OSS是没有文件夹这个概念的,所有元素都是以Object来存储,代码中的myKey或keys是你上传的Object的完整的键名称,比如你上传到 test/myWord/new.doc 里面,那么你的myKey就是“test/myWord/new.doc”,不管你本地的文件名称是什么,上传到云端之后的对象名称就是你的myKey的名称;OSS允许用户自定义Http header,在上传文件的方法中,设置了上传内容类型以及上传文件长度,之前看到一篇文章,是说这个云服务是按照量来计费的,所以需要告知它你要上传的内容长度,但是如果我不设置长度,貌似也能上传成功,原因还不清楚:
/** * OSSClient * * @author andy * @date 2016年8月31日 */ public class OSSClientUtil { // 访问OSS的域名, endpoint以上海为例,其它region请按实际情况填写 private static String endpoint = "http://oss-cn-shanghai.aliyuncs.com"; private static String accessKeyId = "<yourAccessKeyId>"; private static String accessKeySecret = "<yourAccessKeySecret>"; private static String bucketName = "<yourBucketName>"; //getter/setter方法略 }
在上传文件的时候,你需要先创建OSSClient实例,然后调用上传文件的方法。
import java.io.File; import java.io.InputStream; import java.util.List; import com.aliyun.oss.ClientException; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSException; import com.aliyun.oss.model.DeleteObjectsRequest; import com.aliyun.oss.model.DeleteObjectsResult; import com.aliyun.oss.model.GetObjectRequest; import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.OSSObjectSummary; import com.aliyun.oss.model.ObjectListing; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectResult; /** * 从云端上传下载查询删除文件 * * @author andy * @date 2016年8月31日 */ public class FileLoadUtil { /** * 文件上传 * * @param myKey * @param file 要上传的文件 */ public static void upLoadFileToALiyun(String myKey, File file) { // 创建OSSClient实例 OSSClient ossClient = new OSSClient(OSSClientUtil.getEndpoint(), OSSClientUtil.getAccessKeyId(), OSSClientUtil.getAccessKeySecret()); // 创建上传Object的Metadata ObjectMetadata meta = new ObjectMetadata(); // 设置上传内容类型docx meta.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); // 设置上传文件长度 meta.setContentLength(file.length()); // 上传文件 try { PutObjectResult m_Result = ossClient.putObject(OSSClientUtil.getBucketName(), myKey, file, meta); System.out.println(m_Result.getETag()); } catch (OSSException oe) { oe.printStackTrace(); throw new OSSException(); } catch (ClientException ce) { ce.printStackTrace(); throw new ClientException(); } catch (Exception e) { e.printStackTrace(); } finally { ossClient.shutdown();// 关闭client } } /** * 文件下载 * * @param myKey * @param tempFileName 要下载的文件名 * @throws Exception */ public static void downloadFileFromALiyun(String myKey, String tempFileName) throws Exception { // 创建OSSClient实例 OSSClient ossClient = new OSSClient(OSSClientUtil.getEndpoint(), OSSClientUtil.getAccessKeyId(), OSSClientUtil.getAccessKeySecret()); InputStream inputStream = null; // 下载object到文件 try { OSSObject ossObject = ossClient.getObject(new GetObjectRequest(OSSClientUtil.getBucketName(), myKey)); inputStream = ossObject.getObjectContent(); String newStr = new String(tempFileName.getBytes(), "UTF-8"); File f = new File(newStr); FileUtil.inputstreamToFile(inputStream, f); } catch (OSSException oe) { oe.printStackTrace(); throw new Exception(oe.getErrorMessage()); } catch (ClientException ce) { ce.printStackTrace(); throw new Exception(ce.getErrorMessage()); } catch (Exception e) { e.printStackTrace(); throw new Exception(e.getMessage()); } finally { ossClient.shutdown();// 关闭client FileUtil.closeInputStream(inputStream); } } // 查看Bucket中的Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。 public static void queryObject() { // 创建OSSClient实例 OSSClient ossClient = new OSSClient(OSSClientUtil.getEndpoint(), OSSClientUtil.getAccessKeyId(), OSSClientUtil.getAccessKeySecret()); try { // 要查找的文件 ObjectListing objectListing = ossClient.listObjects(OSSClientUtil.getBucketName(), "yourObjectKey/"); List<OSSObjectSummary> objectSummary = objectListing.getObjectSummaries(); System.out.println("您有以下Object:"); for (OSSObjectSummary object : objectSummary) { System.out.println("\t" + object.getKey()); } } catch (OSSException oe) { oe.printStackTrace(); } catch (ClientException ce) { ce.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { ossClient.shutdown();// 关闭client } } // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。 public static void deleteSingleObect(String myKey) { //创建OSSClient实例 OSSClient ossClient = new OSSClient(OSSClientUtil.getEndpoint(), OSSClientUtil.getAccessKeyId(), OSSClientUtil.getAccessKeySecret()); try { ossClient.deleteObject(OSSClientUtil.getBucketName(), myKey); } catch (OSSException oe) { oe.printStackTrace(); } catch (ClientException ce) { ce.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { ossClient.shutdown();// 关闭client } } /** * 批量删除object */ public static void deleteBatchObect(List<String> keys) { // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。 OSSClient ossClient = new OSSClient(OSSClientUtil.getEndpoint(), OSSClientUtil.getAccessKeyId(), OSSClientUtil.getAccessKeySecret()); try { // 删除Objects DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(OSSClientUtil.getBucketName()).withKeys(keys)); List<String> deletedObjects = deleteObjectsResult.getDeletedObjects(); } catch (OSSException oe) { oe.printStackTrace(); } catch (ClientException ce) { ce.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { ossClient.shutdown();// 关闭client } } public static boolean doesObjectExist(String myKey) { OSSClient ossClient = new OSSClient(OSSClientUtil.getEndpoint(), OSSClientUtil.getAccessKeyId(), OSSClientUtil.getAccessKeySecret()); boolean found = false; try { found = ossClient.doesObjectExist(OSSClientUtil.getBucketName(), myKey); } catch (OSSException oe) { oe.printStackTrace(); } catch (ClientException ce) { ce.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { ossClient.shutdown();// 关闭client } return found; } public static void main(String[] args) { // queryObject(); // deleteBatchObect(); // System.out.println(doesObjectExist("yourObjectKey/test.doc")); } }
相关文章推荐
- OSS阿里云对象存储服务,java文件操作
- java操作阿里云的对象存储OSS
- java操作阿里云的对象存储OSS
- java 用List存储对象操作(实例讲解)
- Java使用阿里云OSS对象存储上传图片
- java操作redis存储对象
- aliyun服务器对象存储oss
- Java使用阿里云OSS对象存储上传图片
- 阿里云的OSS对象存储 java
- Java使用阿里云OSS对象存储上传图片
- Java使用阿里云OSS对象存储上传图片
- 黑马程序员_java基础篇操作对象ObjectStream,管道流,随机存储Day5(下)
- java文件对象操作
- Web Service中Axis与DotNet互操作最佳实践:传递java.util.Map对象给C#(译)
- 使用Java操作JSON字符串对象
- 数据结构回顾版-java数据结构-存储对象
- 考虑大对象:利用 JAVA 操作 DB2 Universal Database 中的 LOB 数据
- Java 对象的存储位置
- 利用Java存储过程简化数据库操作
- 利用Java存储过程简化数据库操作