一.分析

要想将阿里云oss集成到新增员工的功能中,必须要设计文件上传的接口UploadController。首先前端给接口上传接口需要接收请求的图片,然后接口再将图片上传到阿里云oss中存储起来,接着接口从阿里云oss中获取图片的url并返回给前端,前端在将获取到的url文件渲染展示出来。
二.UploadController接口文档




响应数据是一个url路径,浏览器拿到该路径即可渲染展示出来该文件。
三.接口的开发

1.首先引入阿里云OSS文件上传的工具类
package com.gjw.util;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;/*** 阿里云 OSS 工具类*/
@Data
@Component // 使用Component实现控制反转(该工具类不属于controller,service,mapper/Dao)
public class AliOSSUtils {private String endpoint = ""; // 选择自己的private String accessKeyID = ""; // 选择自己的private String accessKeySecret = ""; // 选择自己的private String bucketName = ""; // 选择自己的@Autowiredprivate AliOSSProperties aliOSSProperties;/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖String originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}
String originalFilename = file.getOriginalFilename();获取到文件的原始名字
又构建了新的名字:String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));此处代码逻辑和上篇博客中的一模一样。
然后构建ossClient对象调用putObject方法进行文件上传。
文件上传完毕后下面组装文件的访问路径,就是将bucket拼接到endpoint,最后在拼接上文件的名字即可。
最后将url返回即可。
2.图片接口开发
/*** 图片上传接口:* 用于将图片上传到云服务器*/
package com.gjw.controller;import com.gjw.pojo.Result;
import com.gjw.util.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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;@Slf4j
@RestController
public class UploadController {@Autowired // 依赖注入private AliOSSUtils aliOSSUtils;/*@PostMapping("/upload")
// public Result result(String username, Integer age, @RequestParam ("image")MultipartFile file) {public Result result(String username, Integer age, MultipartFile image) throws IOException {log.info("文件上传:{},{},{}",username,age,image);System.out.println(image.getName()); // 获取表单项的名字String originalFilename = image.getOriginalFilename(); // 获取原始文件名// 获取原始文件后缀int index = originalFilename.lastIndexOf(".");String substring = originalFilename.substring(index);// 通过Uuid获取到唯一文件名String uuid = UUID.randomUUID().toString();String newFileName = uuid + substring;// 将文件存储在服务器的磁盘目录中image.transferTo(new File("D:\\tlias-file\\image\\" + newFileName));return Result.success();}*/@PostMapping("/upload")public Result result(MultipartFile image) throws IOException {log.info("文件上传,文件名:{}",image.getOriginalFilename());String url = aliOSSUtils.upload(image);log.info("上传文件的url为:{}",url);return Result.success(url); // 将图片上传后的url返回,用于浏览器的展示}
}
总结
