阿里云oss对象存储的简单使用
Posted 黑胡子大叔的小屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里云oss对象存储的简单使用相关的知识,希望对你有一定的参考价值。
阿里云OSS对象存储
阿里云OSS对象存储
参考优秀博文
https://www.cnblogs.com/dalaoyang/p/10885424.html
https://www.cnblogs.com/l-y-h/p/12805028.html
上传数据信息到oss服务器有三种方式
oss上传三种方式
-
数据先上传到自己的服务器,再由自己的服务器转发到oss服务器
-
前端请求签名,后端服务器完成签名并返回签名,由前端直接上传到oss服务器
- 另外一种就是将key写在前端,完全由前端实现,这种存在安全问题
第一种
工具类
package com.unclebb.zlgl.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import java.io.*;
import java.net.URL;
import java.util.Date;
/**
* @program: zlgl
* @description: oss工具类
* @author: LiuZhiliang
* @create: 2021-05-26 09:14
**/
public class OssUtil {
//这里的配置可以在properties或者yml中进行配置
@Value("${oss.accessKeyId}")
private String accessKeyId = "";
@Value("${oss.accessKeySecret}")
private String accessKeySecret = "";
@Value("${oss.bucketName}")
private String bucketName = "";
@Value("${oss.endPoint}")
private String endPoint = "";
//文件直接上传的方式,path 为文件路径,filename 为定义的文件名字
public void upload(String path, String fileName) {
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
InputStream inputStream = null;
try {
inputStream = new FileInputStream(path);
ossClient.putObject(bucketName, fileName, inputStream);
// 设置URL过期时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);
System.out.println(url.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ossClient != null)
ossClient.shutdown();
}
}
}
第二种
首先返回签名的代码段
public Result getOss() {
String dir = "user-dir-prefix/"; // 用户上传文件时指定的前缀。
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
InputStream inputStream = null;
Map<String, String> respMap = new LinkedHashMap<String, String>();
try {
// 设置URL过期时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
// 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.put("accessid", accessKeyId);
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
respMap.put("dir", dir);
respMap.put("expire", expiration.toString());
respMap.put("host",host);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ossClient != null)
ossClient.shutdown();
}
return Result.ok(respMap);
}
前端上传资源代码段
<template>
<div class="dashboard-container">
<input @change="getpolicy($event)" type="file" ref="refName"/>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { getkey,upload } from '@/api/oss'
export default {
name: 'Dashboard',
computed: {
...mapGetters([
'name'
])
},
methods:{
teststore(){
console.log(this.$store.getters)
},
getpolicy(){
console.log("进入getplicy")
getkey().then(res=>{
console.log(res)
let files = this.$refs['refName'].files
console.log(files)
this.ossUpload(files[0],res.data)
})
},
ossUpload(file, ossToken) {
const filename = file.name;
console.log(filename);
let formData = new FormData();
//注意formData里append添加的键的大小写
formData.append('key', ossToken.dir + filename); //存储在oss的文件路径
formData.append('OSSAccessKeyId', ossToken.accessid); //accessKeyId
formData.append('policy', ossToken.policy); //policy
formData.append('Signature', ossToken.signature); //签名
//如果是base64文件,那么直接把base64字符串转成blob对象进行上传就可以了
formData.append("file", file);
upload(ossToken.host,formData).then(res=>{
console.log(res);
})
}
}
}
</script>
<style lang="scss" scoped>
.dashboard {
&-container {
margin: 30px;
}
&-text {
font-size: 30px;
line-height: 46px;
}
}
</style>
选择了文件便进行了请求key以及上传
这里oss须设置跨域
以上是关于阿里云oss对象存储的简单使用的主要内容,如果未能解决你的问题,请参考以下文章