记录问题:
前言:
由于项目中遇见需要上传资源到OSS,前端同事要求视频资源跨域才能满足功能需求。
查询Oss官方文档
https://help.aliyun.com/document_detail/31870.html?spm=a2c4g.90564.0.0.692d7492iqW2lo
解决:
在初始化OSSClient的实例后,在进行指定跨域资源共享规则的容器CORSRule的初始化和设置
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
SetBucketCORSRequest request = new SetBucketCORSRequest(bucketName);
// 跨域资源共享规则的容器,每个存储空间最多允许10条规则。
ArrayList<SetBucketCORSRequest.CORSRule> putCorsRules = new ArrayList<SetBucketCORSRequest.CORSRule>();
SetBucketCORSRequest.CORSRule corRule = new SetBucketCORSRequest.CORSRule();
ArrayList<String> allowedOrigin = new ArrayList<String>();
// 指定允许跨域请求的来源。
allowedOrigin.add("*");
ArrayList<String> allowedMethod = new ArrayList<String>();
// 指定允许的跨域请求方法(GET/PUT/DELETE/POST/HEAD)。
allowedMethod.add("GET");
allowedMethod.add("PUT");
allowedMethod.add("DELETE");
allowedMethod.add("POST");
allowedMethod.add("HEAD");
ArrayList<String> allowedHeader = new ArrayList<String>();
// 是否允许预取指令(OPTIONS)中Access-Control-Request-Headers头中指定的Header。
allowedHeader.add("*");
ArrayList<String> exposedHeader = new ArrayList<String>();
// 指定允许用户从应用程序中访问的响应头。
// AllowedOrigins和AllowedMethods最多支持一个星号(*)通配符。星号(*)表示允许所有的域来源或者操作。
corRule.setAllowedMethods(allowedMethod);
corRule.setAllowedOrigins(allowedOrigin);
// AllowedHeaders和ExposeHeaders不支持通配符。
corRule.setAllowedHeaders(allowedHeader);
corRule.setExposeHeaders(exposedHeader);
// 指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。
corRule.setMaxAgeSeconds(60);
// 最多允许10条规则。
putCorsRules.add(corRule);
// 已存在的规则将被覆盖。
request.setCorsRules(putCorsRules);
// 指定是否返回Vary: Origin头。指定为TRUE,表示不管发送的是否为跨域请求或跨域请求是否成功,均会返回Vary: Origin头。指定为False,表示任何情况下都不会返回Vary: Origin头。
// request.setResponseVary(Boolean.TRUE);
ossClient.setBucketCORS(request);
}catch (Exception e){
....
}finally {
// 关闭流
ossClient.shutdown();
}