当前位置: 首页 > news >正文

咨询聊城网站建设/最新新闻消息

咨询聊城网站建设,最新新闻消息,web前端大型网站开发教程,免费编程网课目录 👋前言 👀一、环境准备 🌱二、整合实现 1.依赖引入 2.准备 AK 和 SK ​ 3.配置类 4.obs 工具类封装 💞️三、测试使用 🍻四、 obs 客户端 📫五、章末 👋前言 小伙伴们大家好&…

目录

👋前言

👀一、环境准备

🌱二、整合实现

        1.依赖引入

        2.准备 AK 和 SK

​        3.配置类

        4.obs 工具类封装

💞️三、测试使用

🍻四、 obs 客户端

 📫五、章末


👋前言

        小伙伴们大家好,上次了解了如何通过 Java 将文本转为语音,是借助 Jacob 工具实现,可以说是引入了第三方工具类,通过 java 代码调用该工具提供的 api 即可实现我们想要的功能,也算是简单的调用第三方组件;在生产项目中也常见这种三方对接,比如最近了解的华为云对象存储服务,需要将用户所上传的图片文件转移到别的服务,而不是存储在服务器上,这种就可以借助三方服务实现,以减少服务器存储压力,并且适合微服务项目使用;

👀一、环境准备

        1.因为是基于生产项目整合华为云 obs 所以本篇文章不会从如何注册华为云账号开始,本篇文章基于已有华为云存储的鉴权 Key 实现,我们只需要这些 关键 key 值即可,以及开发文档

        这里给大家收集了华为云官方提供的文档可以参考下:

https://console.huaweicloud.com/apiexplorer/#/sdkcenter/OBS?lang=Java

        2.本地项目使用的是 SpringBoot 项目,可以通过 Spring Intilior 简单的创建一个

🌱二、整合实现

        1.依赖引入

        除了关键 key 值以外,我们需要在代码中调用华为云对象存储服务的 api (以下简称 obs),所以需要引入相应的依赖,在pom.xml 文件中加入以下内容,刷新 maven 即可自动下载所需依赖,版本可以自己选择更改

        <dependency><groupId>com.huaweicloud</groupId><artifactId>esdk-obs-java</artifactId><version>3.20.6.1</version></dependency>
        2.准备 AK 和 SK

        这两个属性在华为云接口文档上也有标明 ,将有效的 key 值放到项目的配置文件中,本地使用的是 yml 文件,所以格式如下:    

huawei:obs:endpoint: obs.cn-east-3.myhuaweicloud.comaccessKey: abcde*************secretAccessKey: adcde***********bucketName: my-test-bucketexpiration: 60

         注:这里的额外几个参数意思如下:

        bucketName: 像阿里云oss,华为云obs 这些服务的存储都有一个重要的概念,bucket 简称桶,相当于一个文件夹,里面可以存放很多文件,主要的作用就是区分存储位置,也是在管理页面自己设置,本地设置好之后,后续代码调用上传的都是指定的 bucket 内,方便管理

        endPoint: 在obs文档上有说明,本地根据地区选择的是 华东-上海二 终端节点

        expiration: 指定生成文件下载链接的有效时长(秒)

         3.配置类

        配置文件整理好后,为了后续方便代码调用,需要将 obs 配置映射为一个文件对象,也就是 bean 实例,如下:

        @ConfigurationProperties 中指定了映射的配置内容为 huawei.obs 开头的内容

        @Component 注解中指定了改 bean 实例的名称,这么做是为了防止后续项目启动时找到重名的 bean 导致报错,因为引入的包中可能含有同名的类,这样在注入的时候也指定一下名称,可以避免很多意意想不到的错误

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Component("OBSProperties")
@ConfigurationProperties(prefix = "huawei.obs")
public class ObsProperties {private String endpoint;private String accessKey;private String secretAccessKey;private String bucketName;private Long expiration;
}
        4.obs 工具类封装
@Component
public class ObsUtil {private ObsClient obsClient;@Resource(name = "OBSProperties")private ObsProperties obsProperties;//初始化 ObsUtil 工具类 bean@PostConstructpublic void init() {obsClient = new ObsClient(obsProperties.getAccessKey(), obsProperties.getSecretAccessKey(),obsProperties.getEndPoint());}//注意这里传进来的参数是处理后的图片 base64 参数,处理方法只需要调用 api,这里不做过多解释,可以上网查询转换方法,另外是指定的文件名称和bucket名称,上传后的文件将是以该 fileName 存在于该bucket 内//此方法是用于上传文件,内部调用了 obs 的含有 MD5 参数校验的api方法public void uploadPic(String base64, String fileName) {byte[] bytes = transBase64ToByte(base64);ObjectMetadata meta = new ObjectMetadata();// 设置MD5校验。String md5 = toBase64String(calculateMd5(bytes));meta.setContentMd5(md5);try (InputStream inputStream = new ByteArrayInputStream(bytes)) {PutObjectResult result = obsClient.putObject(obsProperties.getBucketName(), fileName, inputStream,meta);} catch (Exception e) {log.error("Upload failed: ", e);}}// 计算 MD5 值的方法private static byte[] calculateMd5(byte[] data) {try {MessageDigest md = MessageDigest.getInstance("MD5");return md.digest(data);} catch (NoSuchAlgorithmException e) {throw new RuntimeException("MD5 algorithm not found.", e);}}// 将字节数组转换为 Base64 编码的字符串private static String toBase64String(byte[] bytes) {return Base64.getEncoder().encodeToString(bytes);}//该方法是用于检查bucket 内是否有指定文件,内部调用了 obs 的获取文件方法public Boolean checkExist(String fileName) {ObsObject object = null;InputStream inputStream = null;try {object = ObsClient.getObject(bucketName, fileName);inputStream = object.getObjectContent();if (inputStream != null) {return true;}} catch (Exception e) {log.error("请求异常:{}", fileName, e);return false;} finally {// 确保关闭 InputStreamtry {if (inputStream != null) {inputStream.close();}} catch (IOException e) {log.error("关闭 InputStream 异常", e);}}return false;}//该方法是用于获取指定时间内的文件下载链接public String getPicViewUrlByInternal(String fileName) {Boolean aBoolean = checkExist(fileName,obsProperties.getBucketName());if (!aBoolean) {return null;}// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。String url = generatePresignedUrl(obsProperties.getExpiration(), fileName,obsProperties.getBucketName());return url;}private static String generatePresignedUrl(Long expire,String fileName,String bucketName) {TemporarySignatureResponse response = null;try {// URL有效期,3600秒//long expireSeconds = 3600L;TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expire);request.setBucketName(bucketName);request.setObjectKey(fileName);response = obsClient.createTemporarySignature(request);} catch (ObsException e) {log.error("get obs failed :{}", e.getMessage());throw new ServiceException(Messages.getByCode("errors.obs.urlError"));}return Optional.ofNullable(response).map(TemporarySignatureResponse::getSignedUrl).orElse(null);}}

💞️三、测试使用

        在 项目 test/java 下创建单元测试类,这里知识给大家做个展示,平时写好接口之后如何在单元测试类中测试,这里不做具体测试(由于设备原因等,后续也许会更新)

        注:单元测试类必须写在 test 目录下,否则会有注解报错问题

        @SpringBootTest 注解指定了项目启动类,根据自己项目改变

        @SpringRunner 不用改,固定的即可

        @Test 标注为测试方法,可以开启调试或运行功能

@SpringBootTest(classes = TestApplication.class)
@Slf4j
@RunWith(SpringRunner.class)
public class ObsTest {@Resourceprivate ObsUtil obsUtil;@Testpublic void TestUtil(){obSUtil...}}

🍻四、 obs 客户端

        当然除了代码中的调用方式,华为云也是有相对应的管理客户端,通过该应用也可以管理 bucket 文件的上传和删除,当然我们使用的话主要是用来检查文件是否上传成功之类的

        可以搜索 OBS Browser ,下载到本地启动之后的登录页面,选择 AK 方式登录,也就是代码配置文件中的 ak ,账号名这里可以自定义,重要的是 AccessKey 和 Secret Access Key ,访问路径可以不用填写

        登录后的界面如下:点击 bucket 会进入到桶内可以查看当前 bucket 内有哪些文件

 📫五、章末

        另外,因为设备等一些原因,没有对工具类方法测试,可能会有一些小问题,但是后续可能会更新

        文章到这里就结束了~

http://www.whsansanxincailiao.cn/news/32041254.html

相关文章:

  • 火车票网站建设多少钱/sem推广竞价托管
  • 企业网站如何制作/百度搜索排名靠前
  • 仁怀网站建设/优化推广什么意思
  • 网络营销型企业网站案例/关键词提取工具
  • 塘厦网站建设/饥饿营销案例
  • 互联网上网络营销的推广/关键词优化怎么做
  • 网站前台的功能模块/网站推广怎么推广
  • 好文案网站/网络营销心得体会
  • 园区网互联及网站建设项目/百度端口开户推广
  • 深圳企业网站建设服务哪家公司好/百度查询最火的关键词
  • web前端开发案例教程代码/seo推广工具
  • 日照网络推广/优化网站结构一般包括
  • 南京我爱我家网站建设新村二手房/设计师经常用的网站
  • 做网站销售说辞/百度投放广告联系谁
  • 阳江网络问政平台回复查询/宁波seo关键词培训
  • 做网站付款流程/外贸营销网站建设
  • 巩义网站建设托管/上海seo网站优化
  • 云服务器做网站要备案吗/系统优化
  • 网站中有一个非常著名的原则/百度网盘下载
  • 手机网址是什么/seo关键词优化推广哪家好
  • 专业制作行驶证/优化设计五年级上册语文答案
  • 公司网站工程案例怎么做/hyein seo是什么牌子
  • 临安建办网站/seo网站推广教程
  • 门户网站代做/2345导航网址
  • ps在线网站/海南网站推广
  • 怎么做自己的视频网站/百度电脑版下载官网
  • 做娱乐网站少10个页面/第三方关键词优化排名
  • 建设企业网站服务/seo公司的选上海百首网络
  • 什么网站教做美食/线上营销怎么做
  • 赤峰市做网站建设的公司/营销网络