Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析

2.3.3 集成

阿里云oss对象存储服务的准备工作以及入门程序我们都已经完成了,接下来我们就需要在案例当中集成oss对象存储服务,来存储和管理案例中上传的图片。

在新增员工的时候,上传员工的图像,而之所以需要上传员工的图像,是因为将来我们需要在系统页面当中访问并展示员工的图像。而要想完成这个操作,需要做两件事:

  1. 需要上传员工的图像,并把图像保存起来(存储到阿里云OSS)

  2. 访问员工图像(通过图像在阿里云OSS的存储地址访问图像)

    • OSS中的每一个文件都会分配一个访问的url,通过这个url就可以访问到存储在阿里云上的图片。所以需要把url返回给前端,这样前端就可以通过url获取到图像。

我们参照接口文档来开发文件上传功能:

  • 基本信息

    复制代码
    请求路径:/upload
    ​
    请求方式:POST
    ​
    接口描述:上传图片接口
  • 请求参数

    参数格式:multipart/form-data

    参数说明:

    参数名称 参数类型 是否必须 示例 备注
    image file
  • 响应数据

    参数格式:application/json

    参数说明:

    参数名 类型 是否必须 备注
    code number 必须 响应码,1 代表成功,0 代表失败
    msg string 非必须 提示信息
    data object 非必须 返回的数据,上传图片的访问路径

    响应数据样例:

    java 复制代码
    {
        "code": 1,
        "msg": "success",
        "data": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-0400.jpg"
    }

引入阿里云OSS上传文件工具类(由官方的示例代码改造而来)

java 复制代码
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
​
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
​
@Component
public class AliOSSUtils {
    private String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
    private String accessKeyId = "LTAI5t9MZK8iq5T2Av5GLDxX";
    private String accessKeySecret = "C0IrHzKZGKqU8S7YQcevcotD3Zd5Tc";
    private String bucketName = "web-framework01";
​
    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile multipartFile) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = multipartFile.getInputStream();
​
        // 避免文件覆盖
        String originalFilename = multipartFile.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
​
        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);
​
        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
​
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

修改UploadController代码:

java 复制代码
import com.itheima.pojo.Result;
import com.itheima.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
​
@Slf4j
@RestController
public class UploadController {
​
    @Autowired
    private AliOSSUtils aliOSSUtils;
​
    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws IOException {
        //调用阿里云OSS工具类,将上传上来的文件存入阿里云
        String url = aliOSSUtils.upload(image);
        //将图片上传完成后的url返回,用于浏览器回显展示
        return Result.success(url);
    }
    
}

使用postman测试:

相关推荐
变与不变8061 分钟前
引用类型、内存原理与对象
开发语言·前端·javascript
wuyk5551 分钟前
从零吃透 MQTT 通信|第 5 章 MQTT 心跳保活机制深度优化,断线检测与智能自动重连
c语言·开发语言·stm32·学习
weixin_440730509 分钟前
socket解决多次输入问题-大数据接收问题-模块动态导入
java·开发语言·servlet
用户31268748772014 分钟前
ReentrantLock 和 synchronized 到底选哪个?源码级对比与选型
java
计算机毕设定制辅导-无忧学长17 分钟前
基于Spring Boot的玄幻小说个性化推荐平台设计与实现
java·vue.js·spring boot·后端·mysql·推荐算法
码路漫漫18 分钟前
LRU 真的能解决日志按业务 Key 分文件的落地瓶颈吗?
java·后端
带刺的坐椅38 分钟前
不只是 Token 流:Solon AI 4.1 的语义化聊天事件
java·stream·event·solon-ai
延凡科技44 分钟前
建筑节能新视角:智慧冷站的数字化实践
java·人工智能·能源·暖通
励志不掉头发的内向程序员1 小时前
【LibreCAD 2D架构】从鼠标点击到图形创建:RS_ActionDrawLine交互流程与状态机解析
开发语言·c++·qt·学习·系统架构·计算机外设·交互
www_aiyuanma_vip1 小时前
Java个人博客系统
java·开发语言