前后端分离——使用OSS

1. 第一步:编写OSS的工具类

点击查看代码
aliyun: oss: keyid: 填写自己的 keysecret: 填写自己的 endpoint: 填写自己的 bucketname: 填写自己的 @Component public class OSSUtils { public String urlOSS(MultipartFile img){ //地域节点 --- id --- 密钥 --- 存储筒名称 String endpoint = AliYunOssClient.END_POINT; String accessKeyId = AliYunOssClient.KEY_ID; String accessKeySecret = AliYunOssClient.KEY_SECRET; String bucketName = AliYunOssClient.BUCKET_NAME; try { // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); //获取文件上传的输入流 InputStream inputStream = img.getInputStream(); //获取文件名称 String Filename = img.getOriginalFilename(); /** * 1.解决上传同一文件而被新上传的覆盖,使用uuid进行拼接文件名使文件名唯一 * 2.解决上传文件分类问题,根据时间进行分类 */ // 将uuid 转为string 并且把-去除 String uuid = UUID.randomUUID().toString().replaceAll("-",""); Filename = uuid + Filename; /** * 使用的依赖是: * <dependency> * <groupId>joda-time</groupId> * <artifactId>joda-time</artifactId> *</dependency> * new DateTime().toString(),toString()传入日期规则 * yyyy/MM-dd 形成 年为一个文件夹,月-日为一个文件夹 */ org.joda.time.DateTime dateTime = new org.joda.time.DateTime(); String date = dateTime.toString("yyyy/MM/dd"); String filePath = date+"/"+Filename; /** * 第一个参数 bucket名字 * 第二个参数 上传文件到阿里云OSS的文件路径和文件名称,filePath = path + fileName * eg:/a/b/c.jpg * 第三个参数 是文件输入流 */ ossClient.putObject(bucketName,filePath,inputStream); //关闭ossClient ossClient.shutdown(); String url = "https://"+bucketName+"."+endpoint+"/"+filePath; //System.out.println("================="+url); return url; } catch (IOException e) { e.printStackTrace(); return null; } } }

2. OSS的属性

点击查看代码
@Data @Component @ConfigurationProperties(prefix = "aliyun.oss") public class AliYunOssClient implements InitializingBean { private String endPoint; private String keyId; private String keySecret; private String bucketName; public static String END_POINT; public static String KEY_ID; public static String KEY_SECRET; public static String BUCKET_NAME; //在给上面属性通过配置文件注入值之后,定义static变量,让外界直接用类名.的方式获取属性 //此方法在上面私有属性被注入值之后,可以执行下面的方法 @Override public void afterPropertiesSet() throws Exception { END_POINT = endPoint; KEY_ID = keyId; KEY_SECRET = keySecret; BUCKET_NAME = bucketName; } }

3. 上传接口的Controller

点击查看代码
/** * @author 胡铭阳 * @ClassNameUploadController * @Authorhmy * @date 2023/1/2 10:17 * @description:文件图片上传 */ @CrossOrigin @RestController public class UploadController { @Autowired private OSSUtils ossUtils; @PostMapping("/upload") public ResponseResult uploadImg(MultipartFile img){ String s = ossUtils.urlOSS(img); return ResponseResult.okResult(s); } }

4. service接口

点击查看代码
/** * @author 胡铭阳 * @ClassNameUploadService * @Authorhmy * @date 2023/1/2 10:19 * @description:文件图片上传 */ public interface UploadService { /** * 图片上传 * @param img:文件 * @return */ ResponseResult uploadImg(MultipartFile img); }

5. Impl实现类

点击查看代码
/** * @author 胡铭阳 * @ClassNameUploadServiceImpl * @Authorhmy * @date 2023/1/2 10:20 * @description */ @Service public class UploadServiceImpl implements UploadService { @Autowired private OSSUtils ossUtils; /** * 图片上传 * * @param img :文件 * @return */ @Override public ResponseResult uploadImg(MultipartFile img) { String originalFilename = img.getOriginalFilename(); if (originalFilename.equals(".png")||originalFilename.equals(".jpg")||originalFilename.equals(".GIF")||originalFilename.equals(".BMP")){ throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR); } String s = ossUtils.urlOSS(img); return ResponseResult.okResult(s); } }

__EOF__

本文作者baozi爱吃鱼
本文链接https://www.cnblogs.com/hmypxk/p/17073422.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   别遇见  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示