【技术方案分享】华为云OBS&RDS开发实战-java版(中篇)

举报
HuaweiCloudDeveloper 发表于 2022/01/12 16:49:27 2022/01/12
【摘要】 本实践是一个前后端分离的项目,通过集成华为云OBS Java SDK 和华为云RDS数据库,实现用户中心个人图片上传、更新功能。获取源代码:gitee上获取(https://gitee.com/HuaweiCloudDeveloper/dtse-practice)

1  实验目的

  • 使用IDEAVscode开发工具,基于springbootVUE.js框架开发和测试单元编写
  • 能够集成 OBS-Java-SDK RDS for MySQL 进行业务开发
  • 了解用户鉴权、用户信息查询以及用户数据更新等业务实现逻辑

2  项目实战要求

  • 在华为云上创建OBS桶 和 RDS for MySQL 并初始化数据库
  • IDEA工具导入Springboot项目,集成 OBS SDK 和数据库RDS开发环境
  • 查看华为云官方SDK文档,实现“OBSservice”类中 uploadOneFile deleOneFile 方法
  • 能够编写junit测试类,实现接口数据测试
  • 使用VScode工具加载前端代码,输入用户名密码后,查看profile 图片,并修改图片

3  实战项目介绍

本实践是一个前后端分离的项目,通过集成华为云OBS Java SDK 和华为云RDS数据库,实现用户中心个人图片上传、更新功能。

3.1  业务流程图

3.2  部署架构图


3.3  项目实战技术栈

本项目是一个前后端分离项目,涉及:

  • 开发工具:后端开发工具 IntelliJ IDEA 、前端开发工具 VScode
  • 开发技术栈:springboot vue.js jwtmybatis-plusOBS Java-SDK
  • 应用部署技术栈:ECSEIP RDSMySQL)、OBS、华为云CodeHub
  • 运维技术栈:云日志服务 LTS

4  前置条件

  • 已注册华为云账号,完成实名认证,同时账号不能处于欠费或冻结状态;
  • 账户需有足够的余额或代金券;
  • 工具安装:安装好IDEA以及VScode
  • 获取源代码:gitee上获取(https://gitee.com/HuaweiCloudDeveloper/dtse-practice

5  后端代码调试

5.1  代码调试

pom.xml 配置OBS SDKMySQL驱动等依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.example</groupId>
    <artifactId>obs-sdk</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>                      //数据库依赖
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>                   //mybatis
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.huaweicloud</groupId>               //OBS SDK
            <artifactId>esdk-obs-java-bundle</artifactId>
            <version>[3.21.8,)</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.2</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.2</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.11.2</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>annotations</artifactId>
            <version>3.0.1</version>
        </dependency>
        <!-- swagger -->
        <!--dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency-->
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
        </plugins>
    </build>
</project>

5.2  修改配置项

server:
  port: 9090       #服务端口
spring:
  application:
    name: dtse-practice-demo
  #数据库配置参数
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://IP(数据库绑定的公网IP):3306/dtse?useUnicode=true&characterEncoding=utf8       #数据库连接地址
    username: root
    password: **************       #数据库密码
  jpa:
    open-in-view: off
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri:
logging:
  level:
    root: info
    com.huaweicloud: debug
jwt:
  config:
    ttl: 360000
##OBS 配置信息
obs:
  config:
    bucketname: *****        ##OBS桶名称
    #objectname: dtsetraining/Dtest
    endPoint: https://obs.cn-north-4.myhuaweicloud.com          ##访问桶,概述页面获取
    ak: ****                                ##访问秘钥AK
    sk: ****                                ##访问秘钥SK

实现OBSService类的 uploadOneFile deleteOneFile 方法

package com.huaweicloud.dtse.service;
import com.huaweicloud.commons.config.OBSParams;
import com.huaweicloud.commons.response.Result;
import com.huaweicloud.commons.response.ResultCode;
import com.huaweicloud.dtse.service.impl.IOBSService;
import com.obs.services.ObsClient;
import com.obs.services.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
/**
 * OBS service接口
 */
@Service
public class OBSService implements IOBSService {
    @Autowired
    OBSParams obsParams;
    /**
     * @param inputStream 上传至OBS数据流参数
     * @return 返回存入OBS请求参数
     */
    @Override
    public String uploadOneFile(InputStream inputStream) {
        //1、从obsParams中获取OBS 访问配置参数
        String endPoint = obsParams.getEndPoint();
        String ak = obsParams.getAk();
        String sk = obsParams.getSk();
        String bucketname = obsParams.getBucketname();
        String objectname = obsParams.getObjectname();
        //2、创建ObsClient实例
        ObsClient obsClient = new ObsClient(ak, sk, endPoint);
        //3、使用obsClient 的putObject方法,将数据存储至对象存储 OBS
        PutObjectResult putObjectResult = obsClient.putObject(bucketname, objectname, inputStream);
        return putObjectResult.getObjectUrl();
    }
    /**
     * @param deleobjectname 需要删除对象的请求参数
     * @return 返回删除状态
     */
    @Override
    public Result deleteOneFile(String deleobjectname) {
        //1、从obsParams中获取OBS 访问配置参数
        String endPoint = obsParams.getEndPoint();
        String ak = obsParams.getAk();
        String sk = obsParams.getSk();
        String bucketname = obsParams.getBucketname();
        //2、创建ObsClient实例
        ObsClient obsClient = new ObsClient(ak, sk, endPoint);
        //3、使用obsClient 的deleteObject方法,删除OBS中对象
        try {
            obsClient.deleteObject(bucketname, URLDecoder.decode(deleobjectname, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return new Result(ResultCode.SUCCESS);
    }
}

Test类,初始化数据

package com.huaweicloud;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.huaweicloud.commons.pojo.User;
import com.huaweicloud.dtse.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest()
public class test {
    User user = new User();
    @Autowired
    private UserService userService;
    @Test
    public void saveUser() {
        //1、初始化对象参数
        String id = (String) IdWorker.getIdStr();
        String mobile = "15927356938";
        String username = "dtse";
        String password = "dtse";
        user.setId(id);
        user.setMobile(mobile);
        user.setUsername(username);
        user.setPassword(password);
        //2、调用UserService 的save方法保存对象至数据库中。
        userService.save(user);
    }
}

5.3  项目打包

  • IDEA项目打包


  • 项目目录target查看生成的jar

5.4  项目部署

  • jar包上传到服务器


  • 运行jar

相关文章:

【技术方案分享】华为云OBS&RDS开发实战-java版(上篇)

【技术方案分享】华为云OBS&RDS开发实战-java版(下篇)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。