Java调用阿里云对象存储OSS

  • 一、准备
  • 二、新建Bucket
  • 三、AccessKey 管理
  • 四、开发
    • 4.1、maven
    • 4.2、上传文件
      • 4.2.1、简单上传
      • 4.2.1.1、流式上传
      • 4.2.1.2、文件上传
      • 4.2.2、追加上传
      • 4.2.3、断点续传上传
      • 4.2.4、进度条
      • 4.2.5、上传回调
    • 4.3、下载文件
      • 4.3.1、流式下载
      • 4.3.2、下载到本地文件
      • 4.3.3、进度条

一、准备

没有注册阿里云账号的去注册账号并实名

没有开通对象存储OSS,开通对象存储OSS

阿里云官网:https://www.aliyun.com/

OSS控制台:https://oss.console.aliyun.com/

新人福利会场:https://www.aliyun.com/1111/new?userCode=r85k1yor

官方文档:https://help.aliyun.com/product/31815.html

二、新建Bucket


三、AccessKey 管理




请记住申请完子用户AccessKey后不要立即关闭窗口,先将申请的AccessKeySecret进行保存,因为关闭后,再也没办法进行查看AccessKeySecret,只能查看到AccessKeyId。

四、开发

4.1、maven

<dependencies><!--aliyun-oss--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

4.2、上传文件

在OSS中,操作的基本数据单元是文件(Object)。OSS Java SDK提供了以下几种文件上传方式:

  • 简单上传:包括流式上传和文件上传。最大不能超过5GB。
  • 表单上传:最大不能超过5GB。
  • 追加上传:最大不能超过5GB。
  • 断点续传上传:支持并发、断点续传、自定义分片大小。大文件上传推荐使用断点续传。最大不能超过48.8TB。
  • 分片上传:当文件较大时,可以使用分片上传,最大不能超过48.8TB。

上传过程中,您可以设置文件元信息,也可以通过进度条功能查看上传进度。上传完成后,您还可以进行上传回调。

4.2.1、简单上传

简单上传是指通过PutObject方法上传单个文件(Object)。简单上传包括流式上传和文件上传,流式上传使用InputStream作为OSS文件的数据源,文件上传使用本地文件作为OSS文件的数据源。本文介绍如何使用流式上传和文件上传方式上传文件。

4.2.1.1、流式上传

使用流式上传,您可以将数据流上传到OSS文件。文件和文件夹不在在时,可以自动创建。

上传字符串

public class OssUploadString {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 填写字符串。String content = "Hello OSS";// 创建PutObjectRequest对象。// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。PutObjectRequest putObjectRequest = new PutObjectRequest("java521", "testData/test01.txt", new ByteArrayInputStream(content.getBytes()));// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。//ObjectMetadata metadata = new ObjectMetadata();//metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());//metadata.setObjectAcl(CannedAccessControlList.Private);//putObjectRequest.setMetadata(metadata);// 上传文件。ossClient.putObject(putObjectRequest);// 关闭OSSClient。ossClient.shutdown();}
}

上传Byte数组

public class OssUploadByteArray {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 填写Byte数组。byte[] content = "Hello, Mr. Xu".getBytes();// 依次填写Bucket名称、Object完整路径、。Object完整路径中不能包含Bucket名称。ossClient.putObject("java521", "testData/test02.txt", new ByteArrayInputStream(content));// 关闭OSSClient。ossClient.shutdown();}
}

上传网络流

public class OssUploadNetworkStram {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 填写Byte数组。byte[] content = "Hello, Mr. Xu".getBytes();// 填写网络流地址。InputStream inputStream = null;try {inputStream = new URL("https://amap.java521.com/").openStream();} catch (IOException e) {e.printStackTrace();}// 依次填写Bucket名称、Object完整路径、。Object完整路径中不能包含Bucket名称。ossClient.putObject("java521", "testData/test03.txt", inputStream);// 关闭OSSClient。ossClient.shutdown();}
}

上传文件流

public class OssUploadFileStream {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。InputStream inputStream = null;try {inputStream = new FileInputStream("D:\\Java\\test.txt");} catch (FileNotFoundException e) {e.printStackTrace();}// 依次填写Bucket名称、Object完整路径、。Object完整路径中不能包含Bucket名称。ossClient.putObject("java521", "testData/test04.txt", inputStream);// 关闭OSSClient。ossClient.shutdown();}
}

4.2.1.2、文件上传

public class OssUploadFile {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 创建PutObjectRequest对象。// 依次填写Bucket名称、上传到oss的完整路径(包括路径和文件名)、本地文件的完整路径。// 如果未指定本地路径,则默认从程序所属项目对应本地路径中上传文件。PutObjectRequest putObjectRequest = new PutObjectRequest("java521", "testData/test05.txt", new File("D:\\Java\\test.txt"));// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。//ObjectMetadata metadata = new ObjectMetadata();//metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());//metadata.setObjectAcl(CannedAccessControlList.Private);//putObjectRequest.setMetadata(metadata);// 上传文件。ossClient.putObject(putObjectRequest);// 关闭OSSClient。ossClient.shutdown();}
}

4.2.2、追加上传

追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。

使用限制

  • 如果文件不存在,则调用AppendObject接口会创建一个可追加类型的文件。
  • 如果文件已存在,且为可追加类型文件时,若设置的追加位置和文件当前长度不等,则抛出PositionNotEqualToLength异常。如果文件已存在,且为不可追加类型文件时,则抛出ObjectNotAppendable异常。
  • 追加类型的文件暂不支持CopyObject操作。
public class OssAppendUpload {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";String content1 = "Hello World \n";String content2 = "Hello OSS \n";String content3 = "Hello, Mr. Xu \n";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ObjectMetadata meta = new ObjectMetadata();// 指定上传的内容类型。meta.setContentType("text/plain");// 通过AppendObjectRequest设置多个参数。AppendObjectRequest appendObjectRequest = new AppendObjectRequest("java521", "testData/test07.txt", new ByteArrayInputStream(content1.getBytes()), meta);// 通过AppendObjectRequest设置单个参数。// 设置Bucket名称。//appendObjectRequest.setBucketName("<yourBucketName>");// 设置Object名称。即不包含Bucket名称在内的Object的完整路径,例如example/test.txt。//appendObjectRequest.setKey("<yourObjectName>");// 设置待追加的内容。有两种可选类型:InputStream类型和File类型。这里为InputStream类型。//appendObjectRequest.setInputStream(new ByteArrayInputStream(content1.getBytes()));// 设置待追加的内容。有两种可选类型:InputStream类型和File类型。这里为File类型。//appendObjectRequest.setFile(new File("<yourLocalFile>"));// 指定文件的元信息,第一次追加时有效。//appendObjectRequest.setMetadata(meta);// 第一次追加。// 设置文件的追加位置。appendObjectRequest.setPosition(0L);AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest);// 文件的64位CRC值。此值根据ECMA-182标准计算得出。System.out.println(appendObjectResult.getObjectCRC());// 第二次追加。// nextPosition指明下一次请求中应当提供的Position,即文件当前的长度。appendObjectRequest.setPosition(appendObjectResult.getNextPosition());appendObjectRequest.setInputStream(new ByteArrayInputStream(content2.getBytes()));appendObjectResult = ossClient.appendObject(appendObjectRequest);// 第三次追加。appendObjectRequest.setPosition(appendObjectResult.getNextPosition());appendObjectRequest.setInputStream(new ByteArrayInputStream(content3.getBytes()));appendObjectResult = ossClient.appendObject(appendObjectRequest);// 关闭OSSClient。ossClient.shutdown();}
}

4.2.3、断点续传上传

通过断点续传上传的方式将文件上传到OSS前,您可以指定断点记录点。上传过程中,如果出现网络异常或程序崩溃导致文件上传失败时,将从断点记录处继续上传未上传完成的部分。

参数
您可以通过ossClient.uploadFile方法实现断点续传上传。此方法的uploadFileRequest请求包含的参数请参见下表。

参数 描述
BucketName 存储空间名称。
Key 上传到OSS的文件名称。
UploadFile 待上传的本地文件路径。
TaskNum 上传并发线程数,默认值为1。
PartSize 上传的分片大小,单位为Byte,取值范围为100 KB~5 GB。默认值为100 KB。
EnableCheckpoint 是否开启断点续传功能,默认关闭。
CheckpointFile 记录本地分片上传结果的文件。上传过程中的进度信息会保存在该文件中,如果某一分片上传失败,再次上传时会根据文件中记录的点继续上传。上传完成后,该文件会被删除。如果未设置该值,默认与待上传的本地文件同路径,名称为${uploadFile}.ucp。
Callback 使用上传回调。关于上传回调的更多信息,请参见Callback和上传回调。
public class OssBreakpointUpload {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ObjectMetadata meta = new ObjectMetadata();// 指定上传的内容类型。meta.setContentType("text/plain");// 文件上传时设置访问权限ACL。// meta.setObjectAcl(CannedAccessControlList.Private);// 通过UploadFileRequest设置多个参数。// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。UploadFileRequest uploadFileRequest = new UploadFileRequest("java521", "testData/test08.txt");// 通过UploadFileRequest设置单个参数。// 填写Bucket名称。//uploadFileRequest.setBucketName("examplebucket");// 填写Object完整路径。Object完整路径中不能包含Bucket名称。//uploadFileRequest.setKey("exampleobject.txt");// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。uploadFileRequest.setUploadFile("D:\\Java\\test.txt");// 指定上传并发线程数,默认值为1。uploadFileRequest.setTaskNum(5);// 指定上传的分片大小。uploadFileRequest.setPartSize(1 * 1024 * 1024);// 开启断点续传,默认关闭。uploadFileRequest.setEnableCheckpoint(true);// 记录本地分片上传结果的文件。上传过程中的进度信息会保存在该文件中。uploadFileRequest.setCheckpointFile("yourCheckpointFile");// 文件的元数据。uploadFileRequest.setObjectMetadata(meta);// 设置上传成功回调,参数为Callback类型。//uploadFileRequest.setCallback("yourCallbackEvent");// 断点续传上传。try {ossClient.uploadFile(uploadFileRequest);} catch (Throwable throwable) {throwable.printStackTrace();}// 关闭OSSClient。ossClient.shutdown();}
}

4.2.4、进度条

进度条用于指示上传或下载文件的进度。本文以ossClient.putObject方法为例,介绍如何使用进度条。

public class PutObjectProgressListener implements ProgressListener {private long bytesWritten = 0;private long totalBytes = -1;private boolean succeed = false;@Overridepublic void progressChanged(ProgressEvent progressEvent) {long bytes = progressEvent.getBytes();ProgressEventType eventType = progressEvent.getEventType();switch (eventType) {case TRANSFER_STARTED_EVENT:System.out.println("Start to upload......");break;case REQUEST_CONTENT_LENGTH_EVENT:this.totalBytes = bytes;System.out.println(this.totalBytes + " bytes in total will be uploaded to OSS");break;case REQUEST_BYTE_TRANSFER_EVENT:this.bytesWritten += bytes;if (this.totalBytes != -1) {int percent = (int)(this.bytesWritten * 100.0 / this.totalBytes);System.out.println(bytes + " bytes have been written at this time, upload progress: " + percent + "%(" + this.bytesWritten + "/" + this.totalBytes + ")");} else {System.out.println(bytes + " bytes have been written at this time, upload ratio: unknown" + "(" + this.bytesWritten + "/...)");}break;case TRANSFER_COMPLETED_EVENT:this.succeed = true;System.out.println("Succeed to upload, " + this.bytesWritten + " bytes have been transferred in total");break;case TRANSFER_FAILED_EVENT:System.out.println("Failed to upload, " + this.bytesWritten + " bytes have been transferred");break;default:break;}}public boolean isSucceed() {return succeed;}public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";String bucketName = "java521";String objectName = "testData/test09.zip";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 上传文件的同时指定了进度条参数。ossClient.putObject(new PutObjectRequest(bucketName, objectName, new File("D:\\Java\\jdk1.8.0_162\\src.zip")).<PutObjectRequest>withProgressListener(new PutObjectProgressListener()));} catch (Exception e) {e.printStackTrace();}// 关闭OSSClient。ossClient.shutdown();}
}

4.2.5、上传回调

public class OssUploadCallBack {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";String bucketName = "java521";String objectName = "testData/test10.txt";// 您的回调服务器地址,如http://oss-demo.aliyuncs.com:23450或http://127.0.0.1:9090。String callbackUrl = "http://oss-demo.aliyuncs.com:23450";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String content = "Hello OSS";PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));// 上传回调参数。Callback callback = new Callback();callback.setCallbackUrl(callbackUrl);//(可选)设置回调请求消息头中Host的值,即您的服务器配置Host的值。// callback.setCallbackHost("yourCallbackHost");// 设置发起回调时请求body的值。callback.setCallbackBody("{\\\"mimeType\\\":${mimeType},\\\"size\\\":${size}}");// 设置发起回调请求的Content-Type。callback.setCalbackBodyType(Callback.CalbackBodyType.JSON);// 设置发起回调请求的自定义参数,由Key和Value组成,Key必须以x:开始。callback.addCallbackVar("x:var1", "value1");callback.addCallbackVar("x:var2", "value2");putObjectRequest.setCallback(callback);PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);// 读取上传回调返回的消息内容。byte[] buffer = new byte[1024];try {putObjectResult.getResponse().getContent().read(buffer);} catch (IOException e) {e.printStackTrace();}// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。try {putObjectResult.getResponse().getContent().close();} catch (IOException e) {e.printStackTrace();}// 关闭OSSClient。ossClient.shutdown();}
}

其它方式略

4.3、下载文件

4.3.1、流式下载

当下载的文件太大或者一次性下载耗时太长时,您可以通过流式下载,一次处理部分内容,直到完成文件的下载。

ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。关闭方法如下:

OSSObject ossObject = ossClient.getObject(bucketName, objectName);
ossObject.close();
public class OssStreamDownload {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 填写Bucket名称。String bucketName = "java521";// 填写Object的完整路径。Object完整路径中不能包含Bucket名称。 文件必须在oss中在在String objectName = "testData/test10.txt";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。OSSObject ossObject = ossClient.getObject(bucketName, objectName);// 读取文件内容。System.out.println("Object content:");BufferedReader reader = new BufferedReader(new InputStreamReader(ossObject.getObjectContent()));while (true) {String line = null;try {line = reader.readLine();} catch (IOException e) {e.printStackTrace();}if (line == null) break;System.out.println("\n" + line);}// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。try {reader.close();} catch (IOException e) {e.printStackTrace();}// 关闭OSSClient。ossClient.shutdown();}
}

4.3.2、下载到本地文件

public class OssDownloadLocal {public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 填写Bucket名称。String bucketName = "java521";// 填写Object的完整路径。Object完整路径中不能包含Bucket名称。 文件必须在oss中在在String objectName = "testData/test10.txt";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。// 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File("D:\\Java\\downloadFile.txt"));// 关闭OSSClient。ossClient.shutdown();}
}

4.3.3、进度条

进度条用于指示上传或下载文件的进度。本文以ossClient.getObject方法为例,介绍如何使用进度条。

public class GetObjectProgressListener implements ProgressListener {private long bytesRead = 0;private long totalBytes = -1;private boolean succeed = false;@Overridepublic void progressChanged(ProgressEvent progressEvent) {long bytes = progressEvent.getBytes();ProgressEventType eventType = progressEvent.getEventType();switch (eventType) {case TRANSFER_STARTED_EVENT:System.out.println("Start to download......");break;case RESPONSE_CONTENT_LENGTH_EVENT:this.totalBytes = bytes;System.out.println(this.totalBytes + " bytes in total will be downloaded to a local file");break;case RESPONSE_BYTE_TRANSFER_EVENT:this.bytesRead += bytes;if (this.totalBytes != -1) {int percent = (int) (this.bytesRead * 100.0 / this.totalBytes);System.out.println(bytes + " bytes have been read at this time, download progress: " +percent + "%(" + this.bytesRead + "/" + this.totalBytes + ")");} else {System.out.println(bytes + " bytes have been read at this time, download ratio: unknown" +"(" + this.bytesRead + "/...)");}break;case TRANSFER_COMPLETED_EVENT:this.succeed = true;System.out.println("Succeed to download, " + this.bytesRead + " bytes have been transferred in total");break;case TRANSFER_FAILED_EVENT:System.out.println("Failed to download, " + this.bytesRead + " bytes have been transferred");break;default:break;}}public boolean isSucceed() {return succeed;}public static void main(String[] args) {// Endpoint以北京为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "LTAI5tKmStGAf3Qz********";String accessKeySecret = "GgMEjdeUokQ7OscWye1wTZ********";// 填写Bucket名称。String bucketName = "java521";// 填写Object的完整路径。Object完整路径中不能包含Bucket名称。 文件必须在oss中在在String objectName = "testData/test09.zip";OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 下载文件的同时指定了进度条参数。ossClient.getObject(new GetObjectRequest(bucketName, objectName).<GetObjectRequest>withProgressListener(new GetObjectProgressListener()),new File("D:\\Java\\srcTest.zip"));} catch (Exception e) {e.printStackTrace();}// 关闭OSSClient。ossClient.shutdown();}
}

其它方式略

Java调用阿里云对象存储OSS相关推荐

  1. 阿里云对象存储OSS(Object Storage Service)

    文章目录 简介 endpoint:阿里云服务部署的地区位置 见解 开发步骤 配置文件 utils层(读取全局配置文件并赋值给类变量) service层 impl(基于oss驱动sdk实现类) cont ...

  2. 阿里云对象存储OSS图片上传并回显

    阿里云对象存储OSS图片上传并回显 Java代码实现 引入依赖 <!-- 引入阿里云OSS依赖--><dependency><groupId>com.aliyun. ...

  3. 谷粒学苑项目实战(九):实现阿里云对象存储OSS功能

    目录 一.开通阿里云对象存储OSS 二.创建bucket 三.创建操作阿里云OSS许可证 四.用代码实现头像上传功能 五.引入相关依赖 六.创建properties配置文件 七.创建主启动类 八.启动 ...

  4. 阿里云对象存储OSS与文件存储NAS的区别

    一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...

  5. 阿里云对象存储OSS文件上传

    阿里云oss地址: 对象存储OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储OSS是一款海量.安全.低成本.高可靠的云存储服务,提供12个9的数据持久性,99.995%的数据可用性和多种存 ...

  6. 阿里云对象存储OSS入门使用

    阿里云对象存储OSS入门使用 数据,文件的存储: 数据(MySQL) 数据(MySQL)+ 文件(本地:IO流) 数据(MySQL)+ 缓存(Redis)+文件(服务器集群上,fastDFS(集群), ...

  7. 阿里云对象存储OSS服务开通

    一.阿里云对象存储OSS服务开通 1.开通"对象存储OSS"服务 2.进入管理控制台 二.控制台使用 1.创建Bucket 命名:srb-file 读写权限:公共读 2.上传默认头 ...

  8. 阿里云对象存储OSS前端直传,(配合uView组件使用)

    使用场景: uniapp-vue2语法 uview 阿里云对象存储oss 使用步骤: 首先将uView引入我们创建的项目 然后测试是否引入成功 打开uView的官网介绍 | uView 2.0 - 全 ...

  9. 如何结合PICgo,Typora以及阿里云对象存储OSS搭建自己图床写博客

    如何利用阿里云对象存储OSS搭建自己图床写博客 1.购买阿里云 购买链接 登录阿里云–>控制台–>对象存储OSS–购买 购买的时候可以选择按月付费一月一元的,也可以年费9元的,40GB作为 ...

  10. 阿里云对象存储OSS支持版本管理特性

    2019独角兽企业重金招聘Python工程师标准>>> 阿里云对象存储OSS现已经全面支持"对象版本管理"特性.该功能适用于所有的存储类型以及区域.当Bucket ...

最新文章

  1. FPGA之道(58)关于外界接口的编程思路
  2. Head First设计模式之策略模式(Strategy)
  3. EOS 智能合约源代码解读 (3)asset.hpp
  4. [html] web workers有用过吗?能帮我们解决哪些问题?
  5. python实例 79,80
  6. 【转载】嫁给程序员的十大好处。。
  7. linux修改文件没有备份,归档模式,恢复没有备份的数据文件
  8. 信息学奥赛C++语言: 将字符串中的小写字母转换成大写字母
  9. 谷歌巴基斯坦_巴基斯坦的免费文化活动
  10. Docker(十七)-修改Docker容器启动配置参数
  11. 求101-200以内的素数
  12. 在SQL Server中批量复制,导入和导出的技术
  13. 逸管家中小企业未来的发展不可忽视人才战略
  14. 机器学习--组合分类方法之AdaBoost算法
  15. FA_固定资产六大业务增加、修改、报废、在建、折旧、盘点概述(概念)
  16. maya_Vray模型属性批量修改插件 v1.01 下载及教程
  17. IDEA 思维导图 ,类UML 图工具插件 plantUML integration
  18. 腾讯低代码平台实战体验
  19. Android动画之AnimatorSet联合动画用法
  20. Win10连接投影仪画面不是全屏怎么办

热门文章

  1. __u64等的格式化输出
  2. 怎样将图片制作转换圆形图片
  3. 高效记忆/形象记忆(07)英语单词记忆-熟词拆分
  4. Java:1加到100的算法
  5. Windows如何关闭自动更新
  6. 搭建本地服务器中遇到无法启动FTP站点问题
  7. 经纬财富:宁波炒白银亏钱7大原因
  8. 函数发生器输出电压值会与设定值不同
  9. 基于labview的虚拟简单信号发生器
  10. 使用WDF开发驱动程序