一.分析

要想将阿里云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 = ""; // 选择自己的
@Autowired
private 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("."));
//上传文件到 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的路径返回
}
}
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返回,用于浏览器的展示
}
}
总结
