一、前置准备

首先我们需要在阿里云注册账号,实名认证后开通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、prod
spring.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.springframework.stereotype.Component;/*** Created by 令狐冲 on 2022/9/9 16:04*/// 项目启动时 spring加载 实现一个接口执行接口一个方法
@Component
public 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 2022/9/9 16:25*/
@Service
public 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-beijing.aliyuncs.com/%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 com.leader.commonutils.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 2022/9/9 16:26*/
@RestController
@RequestMapping("/oss/fileoss")
@CrossOrigin
public class OssController {@Autowiredprivate OssService ossService;//上传头像的方法@PostMappingpublic R uploadOssFile(MultipartFile file){// MultipartFile -> 获取上传文件// 返回上传到oss的路径String url = ossService.uploadFileAvatar(file);return R.success().data("url",url);}}

测试成功

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

  1. Typora+阿里云OSS(将图片上传到阿里云服务器上)

    1..阿里云OSS搭配PicGo实现图床 1.1.PicoGO 首先去PicGo官网下载 PicGo 一下,安装后打开如下: 2.2.阿里云对象存储OSS购买和配置 阿里云->产品->对象 ...

  2. 使用阿里云OSS完成文件的上传样例

    使用阿里云OSS完成文件的上传 基础条件: 提前注册过阿里云账户 账户里有余额(文件上传按流量收费) 开通过OSS的基础服务 如果有以上基础条件不满足的小伙伴,去度娘了解一下. 前言 有过基础的小伙伴 ...

  3. 微信头像下载并上传到阿里云OSS,PHP文件上传到阿里云OSS简单代码(OSS文件上传,微信头像下载,CURL下载文件,微信头像链接过期)

    (就这么个小事,有多少公司多少项目没做到!!) 微信公众号项目,后端获取到授权用户的微信头像后,要自行下载保存,不下载的话,微信返回的头像链接会在一段时间后过期,无法访问! 下面是我写的两个简单实用方 ...

  4. vue直传图片到阿里云OSS(单张直接上传)

    背景: 近期项目使用到多图片上传功能,常规的调用后端接口上传,可能会出现上传速度慢,体验不佳的情况.那么就考虑另一种上传方式.由前端直接上传到oss.快的一匹... 经过摸索,也实现了.代码其实没啥难 ...

  5. 使用阿里云OSS实现文件的上传、下载、删除及修改功能

    一.配置OSS相关配置信息 1.要配置 OSS 相关配置信息,您可以按照以下步骤操作: 登录阿里云控制台,进入 OSS 控制台,创建一个新的 OSS Bucket,并记录下以下信息:Bucket 名称 ...

  6. vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法

    首先,vue和阿里云oss上传图片结合参考了 这位朋友的 https://www.jianshu.com/p/645f63745abd 文章,成功的解决了我用阿里云oss上传图片前的一头雾水. 该大神 ...

  7. 阿里云oss权限控制,上传下载测试

    2019独角兽企业重金招聘Python工程师标准>>> 列子公共读: 新建一个bucket - > data 存储目录 新建读写账号 -> 访问控制RAM -> 权 ...

  8. 微信小程序基于腾讯云对象存储的图片上传

    在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...

  9. 阿里云对象存储之文件上传

    第一步:创建对象存储 配置如下:引入依赖 <!--springboot的web开发依赖--><dependency><groupId>org.springframe ...

最新文章

  1. 周怎么换算成月_您每天需要多少能量,怎么知道自己摄入多少能量
  2. mysql 并发避免锁表_MYSQL锁表的用法,防止并发情况下的重复数据
  3. 基于licode搭建webrtc服务器
  4. 全面剖析【二叉树】的各类遍历方法
  5. PHP OPCode缓存:APC详细介绍
  6. Orleans 高级特性-目录
  7. [团队项目3.0]Scrum团队成立
  8. 基于直方图处理的图像增强
  9. Python Pytest装饰器@pytest.mark.parametrize用例数据驱动(三)
  10. 神奇的 SQL 之团结的力量 → JOIN
  11. 新希望:拟参与设立总规模40亿元的广西新希望生猪保供专项产业基金
  12. SQL 判断 临时表是否存在
  13. python中类的定义_python 类中定义类
  14. Please Select android SDK的解决办法
  15. 中颐软启动器说明书_中颐软启动器维修
  16. uni-app获取屏幕高度和宽度
  17. Octree 了然于胸
  18. 优酷、腾讯视频播放器接口参数说明
  19. iOS开发之观察者模式
  20. 什么是Teardrop攻击

热门文章

  1. paddle 41 在paddledetection添加RotateScaleCopyPaste数据增强方法
  2. 微信开放平台应用绑定
  3. 蓝牙MESH网关_相对于米家多模网关,其实我更爱的是光照传感器
  4. 移动App统计指标汇总
  5. 勘探重力实验matlab,重力场与重力勘探实验指导.ppt
  6. 2021年6月PMP考试50天备考5A通过经历心得分享
  7. 无监督学习-案例分析:利率期限结构
  8. Windos测试IP和端口是否能访问
  9. Ubuntu18.04运行校园网客户端
  10. 微信iOS WKWebview 网页开发适配指南