总体思路是后端向华为云obs服务器申请授权信息并设置过期时间,后端再将授权信息以map形式发给前端,前端将文件和授权信息直接发给华为云obs服务器。
1. 引入依赖
<dependency>
<groupid>com.huaweicloud</groupid>
<artifactid>esdk-obs-java</artifactid>
<version>3.20.6.1</version>
</dependency>
<dependency>
<groupid>com.huaweicloud</groupid>
<artifactid>esdk-obs-java-bundle</artifactid>
<version>3.23.9</version>
</dependency>
2. 向前端发送授权码
package com.example.meetings.controller;
import com.obs.services.obsclient;
import com.obs.services.model.*;
import org.springframework.web.bind.annotation.*;
import java.text.simpledateformat;
import java.util.*;
/**
* @classname: obscontroller
* @description: obs服务器controller
* @author: wuhuiju
* @version: 1.0
*/
@restcontroller
@requestmapping({ "/oss" })
public class hweiyunobscontroller {
/**
* 完整域名为/oss/policy
* 返回结果
formparams.put("x-obs-acl", "public-read");
formparams.put("content-type", "text/plain");
formparams.put("accessid", accessid);
formparams.put("policy", response.getpolicy());
formparams.put("signature", response.getsignature());
formparams.put("dir", dir);
formparams.put("host", host);
*/
@crossorigin
@getmapping("/policy")
public map<string, object> policy() {
// 访问id
string accessid = "************************";
// 访问密钥
string accesskey = "************************";
// endpoint
string endpoint = "************************";
// 填写bucket名称
string bucket = "pic";
// 填写host地址,格式为https://bucketname.endpoint。
string host = "https://" + bucket + "." + endpoint;
// 设置上传到oss文件的前缀,可置空此项
simpledateformat simpledateformat = new simpledateformat("yyyy-mm-dd");
// 生成文件夹,以日期为文件夹名
string dateform = simpledateformat.format(new date());
string dir = "pic/" + dateform + "/";
// 创建obsclient实例
// 使用永久ak/sk初始化客户端
obsclient obsclient = new obsclient(accessid, accesskey,endpoint);
try {
// 生成基于表单上传的请求
postsignaturerequest request = new postsignaturerequest();
// 返回结果
map<string, object> formparams = new hashmap<string, object>();
// 设置对象访问权限为公共读
formparams.put("x-obs-acl", "public-read");
// 设置对象mime类型
formparams.put("content-type", "image/jpeg");
request.setformparams(formparams);
// 设置表单上传请求有效期,单位:秒
request.setexpires(3600);
postsignatureresponse response = obsclient.createpostsignature(request);
formparams.put("accessid", accessid);
formparams.put("policy", response.getpolicy());
formparams.put("signature", response.getsignature());
formparams.put("dir", dir);
formparams.put("host", host);
return formparams;
} catch (exception e) {
system.out.println(e.getmessage());
}
return null;
}
}
发表评论