0
点赞
收藏
分享

微信扫一扫

对象存储 OSS(阿里云)

教程

image.png

image.png

image.png

image.png

安装SDK

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = http://oss-cn-hangzhou.aliyuncs.com;
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
//选择编程访问访问 创建并分配权限
String accessKeyId = <yourAccessKeyId>;
String accessKeySecret = <yourAccessKeySecret>;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 上传文件流。
InputStream inputStream = new FileInputStream(<yourlocalFile>);
ossClient.putObject(<yourBucketName>, <yourObjectName>, inputStream);

// 关闭OSSClient。
ossClient.shutdown();

测试上传

@Test
public void testUpload() throws FileNotFoundException {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = oss-cn-shanghai.aliyuncs.com;
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
String accessKeyId = LTAI4GHNJeXXXXXXX;
String accessKeySecret = CkejF3KCBTLcB0XXXXX;

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。name上传地址
InputStream inputStream = new FileInputStream(C:\\Users\\qigan\\Pictures\\qsmy-(2).jpg);
//S存储空间名字 s1 文件对象名字
ossClient.putObject(gulimall-wqg, qsmy-(2).jpg, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
System.out.println(长传成功);
}

使用Alibaba Cloud OSS Example

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>

配置alicloud oss

spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
alicloud:
access-key: LTAI4GHNJeXXXXXXX
secret-key: CkejF3KCBTLcB0JUXXXXXXX
oss:
endpoint: oss-cn-shanghai.aliyuncs.com
bucket: gulimall-wqg
application:
name: gulimall-third-party
server:
port: 2006

OssController

@RestController
public class OssController {

//获取配置文件中的值
@Value(${spring.cloud.alicloud.oss.endpoint})
private String endpoint;
@Value(${spring.cloud.alicloud.oss.bucket})
private String bucket;
@Value(${spring.cloud.alicloud.access-key})
private String accessId;

@Autowired
OSS ossClient;
@RequestMapping(/oss/policy)
private R policy(){
String host = https:// + bucket + . + endpoint; // host的格式为 bucketname.endpoint
// callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
//String callbackUrl = http://88.88.88.88:8888;
//创建年月日格式,在格式化当前时间
String format = new SimpleDateFormat(yyyy-MM-dd).format(new Date());
String dir = format+/; // 用户上传文件时指定的前缀。

Map<String, String> respMap =null;
// 创建OSSClient实例。
try {
long expireTime = 30;
long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
Date expiration = new Date(expireEndTime);
// PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
PolicyConditions policyConds = new PolicyConditions();
policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);

String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
byte[] binaryData = postPolicy.getBytes(utf-8);
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = ossClient.calculatePostSignature(postPolicy);

respMap = new LinkedHashMap<String, String>();
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));
// respMap.put(expire, formatISO8601Date(expiration));

} catch (Exception e) {
// Assert.fail(e.getMessage());
System.out.println(e.getMessage());
} finally {
ossClient.shutdown();
}
return R.ok().put(data,respMap);
}
}


举报

相关推荐

0 条评论