1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 阿里云OSS | 对象存储服务快速入门 | 参考官方文档实现使用JavaSDK上传文件 |

阿里云OSS | 对象存储服务快速入门 | 参考官方文档实现使用JavaSDK上传文件 |

时间:2021-09-01 12:58:57

相关推荐

阿里云OSS | 对象存储服务快速入门 | 参考官方文档实现使用JavaSDK上传文件 |

参考文档 : 点击查看

文章目录

运行环境一、OSS相关概念1.1 Storage Class 存储类型1.2 Bucket 存储空间1.3 Object 对象1.4 Region 地域1.5 Endpoint 访问域名1.6 AccessKet 访问密钥二、使用阿里云OSS服务2.1 开通OSS服务2.2 创建 Bucket(存储空间)2.3 在网页上传文件2.4 创建用户,生成AccesskeyID与Secret2.5 为用户添加读权限三、使用JavaSDK操作OSS3.1 操作一:测试连接3.2 操作二:本地上传文件3.3 操作三:在Web项目里实现OSS上传设置CORS解决跨域问题

运行环境

ChromeJDK8IDEA .3 旗舰版Visual Status Code 带 Live Server插件(可快速解析Web的HTML、CSS、JavaScript)

一、OSS相关概念

官方文档:点击查看

OSS 全称 Object Storage Service,即对象存储服务,是由阿里云提供的海量、安全、低成本、高可靠的云存储服务。

OSS具有与平台无关的RESTful API接口,可在任意应用、任意地点存储与访问任何类型的数据。网站的图片、视频等文件就可以存放在OSS中(海量数据,交给阿里云平台维护,安全可靠)

1.1 Storage Class 存储类型

有标准、低频访问、归档、冷归档四种存储类型,价格依次递减

标准:高持久、高可哦那个、高性能,支持频繁的数据访问

低频访问:适合长期保存不经常访问的数据(平均每月1-2次频率)

归档:适合需长期保存(建议半年以上)的数据

冷归档:适合超长事件存放的极冷数据

1.2 Bucket 存储空间

存储空间是用于存储对象(Object)的容器。

具有各种配置属性,包括地域、访问权限、存储类型等。

1.3 Object 对象

OSS存储数据的基本单元,同时被称作OSS的文件。

Object 由Object Meta、Data和Key组成,即元信息、用户数据和文件名。

Object 由 Bucket内部唯一的Key来表示

Object Meta 元信息是一组键值对,表示了Object的一些属性,比如最后修改时间、大小等信息,同时也可以自定义信息。

1.4 Region 地域

OSS的数据中心所在物理位置,在创建Bucket时徐选择合适的地域。

1.5 Endpoint 访问域名

OSS对外服务的访问域名,通过域名存储、获取对象。

1.6 AccessKet 访问密钥

AccessKey 简称AK,指访问身份验证中用到的AK ID 和 AK Secret,前者用于标识用户,后者表示该用户的密钥。

二、使用阿里云OSS服务

2.1 开通OSS服务

访问阿里云官网:https://oss./

注册账号(过程略)后搜索OSS对象存储服务,点击立即开通

2.2 创建 Bucket(存储空间)

在OSS管理页面中创建存储空间(Bucket)

按照自己的需求进行设置

2.3 在网页上传文件

用途一:手动上传文件

点击详情可直接下载文件或者复制文件的URL

2.4 创建用户,生成AccesskeyID与Secret

AccessKey就相当于一个账号和密码,可以视为小号,这里主要用于访问之前创建的存储空间。

将鼠标移至阿里云网站右上角的头像,选择访问控制,

第二步,点击创建用户

第三步,设置登录名称和显示名称后,选中Open API 调用访问选择框

第四步,创建用户成功,自动生成了AccessKey对应的ID和Secret

2.5 为用户添加读权限

第一步,选中当前的用户,点击添加权限

第二步,根据需要添加权限,比如管理OSS权限还有只读OSS的权限

三、使用JavaSDK操作OSS

3.1 操作一:测试连接

官方文档:点击查看

第一步,Maven引入依赖

pom.xml

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.13.2</version></dependency>

第二步,编写Java代码,(其他地域的访问映射 点击访问)

package com.uni;import com.aliyun.oss.ClientException;import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClientBuilder;import com.aliyun.oss.OSSException;public class testOSS {public static void main(String[] args) throws Exception {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。关于其他Region对应的Endpoint信息,请参见访问域名和数据中心。String endpoint = "https://oss-cn-";// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "创建用户时生成的Bucket ID";String accessKeySecret = "创建用于时生成的Bucket Secret";String bucketName = "创建的用户";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 创建存储空间。ossClient.createBucket(bucketName);} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}}

执行结果:

至此,OSS与Java连接成功。

3.2 操作二:本地上传文件

参考官方文档:点击查看

第一步,导入Maven依赖(和之前一样)

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.13.2</version></dependency>

官方服务端下载地址:(用于参考)点击下载

第二步,参考官方提供的代码,编写JavaWeb上传文件的Java代码

package com.uni;import com.aliyun.oss.ClientException;import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClientBuilder;import com.aliyun.oss.OSSException;import com.aliyun.oss.model.PutObjectRequest;import java.io.File;public class testOSS {public static void main(String[] args) throws Exception {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-";// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "你的Bucket ID";String accessKeySecret = "你的 Bucket Secret";// 填写Bucket名称,例如examplebucket。String bucketName = "unirithe";// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。String objectName = "pom.xml";// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。String filePath= "D:\\pom.xml";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传文件。ossClient.putObject(putObjectRequest);} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}}

3.3 操作三:在Web项目里实现OSS上传

本次案例采取直接在后端传输文件到OSS,还有一种方法是从后端发送签名到前端,由前端进行发送,后者效率更高,这里没有继续深入,暂时用后端实现简单的上传。

由于函数回调需要用到公网IP,这里就不测试了。

官方参考文档:点击查看

第一步,导入SDK Maven依赖(Web相关的依赖这里忽略了,请自行添加)

pom.xml

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.13.2</version></dependency>

第二步,编写Controller层代码

package com.uni.controller;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClient;import com.aliyun.oss.OSSClientBuilder;import com.mon.utils.BinaryUtil;import com.aliyun.oss.model.MatchMode;import com.aliyun.oss.model.PolicyConditions;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;import java.nio.charset.StandardCharsets;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.*;@RestControllerpublic class OssController {@GetMapping("/oss/test")public String testOss(){String accessId = "待填写"; // 请填写您的AccessKeyId。String accessKey = "待填写"; // 请填写您的AccessKeySecret。String endpoint = "待填写"; // 请填写您的 endpoint,比如杭州oss-cn-。String bucket = "待填写"; // 请填写您的 bucketname 。String host = "https://" + bucket + "." + endpoint; // host的格式为 bucketname.endpoint// jasonCallback 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。// String callbackUrl = "http://localhost:8080/oss/test";String dir = DateTimeFormatter.ofPattern("yyyy-MM-dd-").format(LocalDateTime.now()) + "/"; // 用户上传文件时指定的前缀。Map<String, String> respMap = new LinkedHashMap<String, String>();JSONObject jasonCallback = new JSONObject();// 创建OSSClient实例OSS client = new OSSClientBuilder().build(endpoint, accessId, accessKey);try {long expireTime = 30;long expireEndTime = System.currentTimeMillis() + expireTime * 1000;Date expiration = new Date(expireEndTime);PolicyConditions policyConds = new PolicyConditions();policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);String postPolicy = client.generatePostPolicy(expiration, policyConds);byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8);String encodedPolicy = BinaryUtil.toBase64String(binaryData);String postSignature = client.calculatePostSignature(postPolicy);System.out.println("policy:" + Arrays.toString(binaryData));respMap.put("accessid", accessId);respMap.put("policy", encodedPolicy);respMap.put("signature", postSignature);respMap.put("dir", dir);respMap.put("host", host);respMap.put("expire", String.valueOf(expireEndTime / 1000));// jasonCallback.put("callbackUrl", callbackUrl);// jasonCallback.put("callbackBody",//"filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");// jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");// String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());// respMap.put("callback", base64CallbackBody);// response.setHeader("Access-Control-Allow-Origin", "*");// response.setHeader("Access-Control-Allow-Methods", "POST");} catch (Exception e) {System.out.println(e.getMessage());}return JSON.toJSONString(new HashMap<String, Object>(){{put("Code", 1);put("Status", "success");put("items" ,respMap);// put("jasonCallback", jasonCallback);}});}}

第三步,下载客户端进行回调测试

官方下载地址:点击下载

选择本地文件,点击开始上传,出现跨域错误

设置CORS解决跨域问题

OSS 修改 CORS,解决跨域问题

根据自身需要设置跨域规则

再次访问前端项目,上传成功!

阿里云OSS | 对象存储服务快速入门 | 参考官方文档实现使用JavaSDK上传文件 | 本地上传与web上传案例

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。