springboot 整合 OOS (阿里云)
1.不经过服务器,直接上传到OSS
参考文章Springboot+mybatis集成上传文件至阿里云OSS中,(不经过服务器,直接上传到OSS)
1.1 pom
<dependency>
<groupId>com.alibaba.cloud
</groupId>
<artifactId>spring-cloud-starter-alicloud-oss
</artifactId>
</dependency>
1.2 application.properties
spring:
cloud:
alicloud:
access-key: LTAI4FwvfjSycd1APnuG9bjj
secret-key: O6xaxyiWfSIitcOkSuK27ju4hXT5Hl
oss:
endpoint: oss
-cn
-beijing.aliyuncs.com
bucket: gulimall
-hello
nacos:
discovery:
server-addr: 123.57.111.171
:8848
application:
name: gulimall
-third
-party
server:
port: 30000
1.3 java代码
import com
.aliyun
.oss
.OSS
;
import com
.aliyun
.oss
.common
.utils
.BinaryUtil
;
import com
.aliyun
.oss
.model
.MatchMode
;
import com
.aliyun
.oss
.model
.PolicyConditions
;
import com
.atguigu
.common
.utils
.R
;
import org
.springframework
.beans
.factory
.annotation
.Autowired
;
import org
.springframework
.beans
.factory
.annotation
.Value
;
import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
import org
.springframework
.web
.bind
.annotation
.RestController
;
import javax
.annotation
.Resource
;
import java
.text
.SimpleDateFormat
;
import java
.util
.Date
;
import java
.util
.LinkedHashMap
;
import java
.util
.Map
;
@RestController
public class OssController {
@Resource
OSS ossClient
;
@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
;
@RequestMapping("/oss/policy")
public R
policy() {
String host
= "https://" + bucket
+ "." + endpoint
;
String format
= new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String dir
= format
+ "/";
Map
<String, String> respMap
= null
;
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
= 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));
} catch (Exception e
) {
System
.out
.println(e
.getMessage());
}
return R
.ok().put("data",respMap
);
}
}
2.经过服务器,再上传到OSS
2.1 pom
<dependencies>
<dependency>
<groupId>com.aliyun.oss
</groupId>
<artifactId>aliyun-sdk-oss
</artifactId>
</dependency>
<dependency>
<groupId>joda-time
</groupId>
<artifactId>joda-time
</artifactId>
</dependency>
</dependencies>
2.2 application.properties
#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#================================OOS 开始====================================
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=LTAI4FvvVEWiTJ3GNJJqJnk7
aliyun.oss.file.keysecret=9st82dv7EvFk9mTjYO1XXbM632fRbG
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=edu-guli-1010
#================================OOS 结束====================================
2.3 java代码
上传路径是 YYYY/MM/dd/Filename.XXX
import com
.aliyun
.oss
.OSS
;
import com
.aliyun
.oss
.OSSClientBuilder
;
import com
.atguigu
.oss
.service
.OssService
;
import com
.atguigu
.oss
.utils
.ConstantPropertiesUtils
;
import org
.joda
.time
.DateTime
;
import org
.springframework
.stereotype
.Service
;
import org
.springframework
.web
.multipart
.MultipartFile
;
import java
.io
.InputStream
;
import java
.text
.SimpleDateFormat
;
import java
.util
.Date
;
import java
.util
.UUID
;
public String
uploadFileAvatar(MultipartFile file
) {
String endpoint
= ConstantPropertiesUtils
.END_POIND
;
String accessKeyId
= ConstantPropertiesUtils
.ACCESS_KEY_ID
;
String accessKeySecret
= ConstantPropertiesUtils
.ACCESS_KEY_SECRET
;
String bucketName
= ConstantPropertiesUtils
.BUCKET_NAME
;
try {
OSS ossClient
= new OSSClientBuilder().build(endpoint
, accessKeyId
, accessKeySecret
);
InputStream inputStream
= file
.getInputStream();
String fileName
= file
.getOriginalFilename();
String uuid
= UUID
.randomUUID().toString().replaceAll("-","");
fileName
= uuid
+fileName
;
String datePath
= new DateTime().toString("yyyy/MM/dd");
fileName
= datePath
+"/"+fileName
;
ossClient
.putObject(bucketName
,fileName
, inputStream
);
ossClient
.shutdown();
String url
= "https://"+bucketName
+"."+endpoint
+"/"+fileName
;
return url
;
}catch(Exception e
) {
e
.printStackTrace();
return null
;
}
}