2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > JAVA通过阿里云OSS存储实现图片上传功能

JAVA通过阿里云OSS存储实现图片上传功能

时间:2021-01-09 03:52:23

相关推荐

JAVA通过阿里云OSS存储实现图片上传功能

一、前置准备

首先我们需要在阿里云注册账号,实名认证后开通OSS功能,点击进入OSS功能的管理平台

进入概览页面后,点击Bucket列表,创建一个Bucket(相当于一个存放文件的文件夹)

关键是要获得下面几个关键的信息,只有拥有这些信息才能连接上这个Bucket进行操作:

endpoint:使用不同地方的服务器地址也不同

keyid:相当于登录账号,点击可自动导出你的id与sercret

keysecret:一长串的随机密钥供登录使用

bucketname:创建的BucketName名称

二、开始操作

添加对应依赖

<!-- 阿里云oss依赖--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId></dependency><!-- 日期工具栏依赖 --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId></dependency>

1、 首先我们创建一个配置文件,里面保存一些常规配置以及上面我们得到的关于oss的配置信息

# application.properties#服务端口server.port=8002#服务名spring.application.name=service-oss#环境设置:dev、test、prodspring.profiles.active=dev#阿里云 OSS#不同的服务器,地址不同aliyun.oss.file.endpoint=<!--endpoint-->aliyun.oss.file.keyid=<!--keyid-->aliyun.oss.file.keysecret=<!--keysecret-->#bucket可以在控制台创建,也可以使用java代码创建aliyun.oss.file.bucketname=<!--bucketname-->

也可以使用yml文件

# application.yml# 服务端口号server:port: 8002spring:# 服务名application:name: service-oss# 环境设置:dev、test、prodprofiles:active: dev# 阿里云OSS# 不同服务器地址不同aliyun:oss:file:endpoint: <!--endpoint-->keyid: <!--keyid-->keysecret: <!--keysecret-->bucketname: <!--bucketname-->

2、创建一个工具类将配置文件中要使用的信息提取出来,解耦合

package com.xxx.oss.utils;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Value;import org.ponent;/*** Created by 令狐冲 on /9/9 16:04*/// 项目启动时 spring加载 实现一个接口执行接口一个方法@Componentpublic class ConstantPropertiesUtils implements InitializingBean {// 读取配置文件中的内容@Value("${aliyun.oss.file.endpoint}")private String endpoint;@Value("${aliyun.oss.file.keyid}")private String keyId;@Value("${aliyun.oss.file.keysecret}")private String keySecret;@Value("${aliyun.oss.file.bucketname}")private String bucketName;// 在spring生命周期中 实例化->生成对象->属性填充后会进行afterPropertiesSet方法// 定义空开常用变量public static String END_POINT;public static String KEY_ID;public static String KEY_SECRET;public static String BUCKET_NAME;@Overridepublic void afterPropertiesSet() throws Exception {END_POINT = endpoint;KEY_ID = keyId;KEY_SECRET = keySecret;BUCKET_NAME = bucketName;}}

3、编写service实现层实例化oss进行操作

package com.xxx.oss.service.impl;import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClientBuilder;import com.aliyun.oss.model.GeneratePresignedUrlRequest;import com.leader.oss.service.OssService;import com.leader.oss.utils.ConstantPropertiesUtils;import org.joda.time.DateTime;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import java.io.IOException;import java.io.InputStream;import java.util.UUID;/*** Created by 令狐冲 on /9/9 16:25*/@Servicepublic class OssServiceImpl implements OssService {// 上传头像到oss@Overridepublic String uploadFileAvatar(MultipartFile file) {// 从工具类中获取对象String endpoint = ConstantPropertiesUtils.END_POINT;String accessKeyId = ConstantPropertiesUtils.KEY_ID;String accessKeySecret = ConstantPropertiesUtils.KEY_SECRET;String bucketName = ConstantPropertiesUtils.BUCKET_NAME;try {// 创建OSS实例OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 获取上传文件的输入流InputStream inputStream = file.getInputStream();// 获取文件原始名称String filename = file.getOriginalFilename();// 完善1、 --> 在文件名中添加唯一值String uuid = UUID.randomUUID().toString().replace("-", "");filename = uuid + filename;// 完善2、 --> 把文件按照日期分类String datePath = new DateTime().toString("yyyy/MM/dd");// 拼接时间 yyyy/MM/dd/filenamefilename = datePath + "/" + filename;//System.out.println(filename);// 调用oss方法实现上传// 1、bucketName 2、上传到oss文件路径和文件名称 3、文件的输入流ossClient.putObject(bucketName, filename, inputStream);// 获取url地址(根据阿里云oss中的图片实例拼接字符串) 拼接url字符串// https://edu-leader.oss-cn-/%E4%BB%96.jpgString url = "https://"+bucketName+"."+endpoint+"/"+filename;// 关闭ossossClient.shutdown();return url;} catch (IOException e) {e.printStackTrace();return null;}}}

4、在控制层设置RequestMappint,通过swagger测试接口

package com.xxx.oss.controller;import monutils.R;import com.leader.oss.service.OssService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.CrossOrigin;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;/*** Created by 令狐冲 on /9/9 16:26*/@RestController@RequestMapping("/oss/fileoss")@CrossOriginpublic class OssController {@Autowiredprivate OssService ossService;//上传头像的方法@PostMappingpublic R uploadOssFile(MultipartFile file){// MultipartFile -> 获取上传文件// 返回上传到oss的路径String url = ossService.uploadFileAvatar(file);return R.success().data("url",url);}}

测试成功🙆‍♂️

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。