目录
-
-
- 1.后台提供OSS签名API
-
- 2.后台提供OSS签名API
-
1.后台提供OSS签名API
1.1.OSS参数配置
file:
alicloud:
bucket-name: itsource-hrm
access-key: LTAI4GBU4kV67teSKSzkKpxN
secret-key: 0f9Djm2Ypds2mMBOma7iuInLqlbJL9
endpoint: oss-cn-chengdu.aliyuncs.com
1.2.签名接口
@RestController
public class AlicloudOSSController {
@Autowired
private AlicloudOSSProperties properties;
@GetMapping("/oss/sign")
public AjaxResult ossSign(){
String host = "https://" + properties.getBucketName() + "." + properties.getEndpoint();
String dir = "itsource";
OSS ossClient = 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);
ossClient = new OSSClientBuilder().build(properties.getEndpoint(), properties.getAccessKey(), properties.getSecretKey());
String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
byte[] binaryData = postPolicy.getBytes("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
String postSignature = ossClient.calculatePostSignature(postPolicy);
Map<String, String> respMap = new LinkedHashMap<String, String>();
respMap.put("accessid", properties.getAccessKey());
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
respMap.put("dir", dir);
respMap.put("host", host);
respMap.put("expire", String.valueOf(expireEndTime / 1000));
return AjaxResult.me().setResultObj(respMap);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
if(ossClient != null){
ossClient.shutdown();
}
}
return null;
}
}
2.后台提供OSS签名API
2.1.上传组件
<el-upload
class="upload-demo"
action="http://itsource-hrm.oss-cn-chengdu.aliyuncs.com"
:data="uploadData"
:before-upload="beforeUpload"
:on-success="handleSuccess"
:file-list="fileList"
list-type="picture">
<el-button size="small" type="primary">点击上传el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kbdiv>
el-upload>
2.2. JS获取签名
export default {
data() {
return {
uploadData: {
policy: '',
signature: '',
key: '',
ossaccessKeyId: '',
dir: '',
host: ''
}
};
},
methods: {
getUUID() {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4";
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
s[8] = s[13] = s[18] = s[23] = "-";
var uuid = s.join("");
return uuid;
},
async beforeUpload(){
await this.$http.get("/file/oss/sign").then(response=>{
var resultObj = response.data.resultObj;
alert(this.uploadData.policy);
this.uploadData.policy = resultObj.policy;
alert(this.uploadData.policy);
this.uploadData.signature = resultObj.signature;
this.uploadData.ossaccessKeyId = resultObj.accessid;
this.uploadData.key = resultObj.dir + '/'+this.getUUID()+'_${filename}';
this.uploadData.dir = resultObj.dir;
this.uploadData.host = resultObj.host;
});
},
handleSuccess(res, file) {
this.fileList.pop();
var urlPath = this.uploadData.host + '/' + this.uploadData.key.replace("${filename}",file.name) ;
this.employee.logo = urlPath;
this.$message({message: '上传成功,图片地址:'+this.employee.logo, type: 'success' });
},
handleRemove(file, fileList) {
},
handlePreview(file) {
}
}