1.开通服务

登录阿里云的官方申请oss服务阿里云官网

搜索oss对象存储 然后申请,这里我已经申请过了

2.然后打开控制台

按顺序创建一个Bucket仓库

有的时候仓库可能没有添加到访问路径我们可以自己手动添加根据提示选择

进入仓库看看详细信息

这里我们需要记录一下外网访问节点,后面访问的时候需要用到

然后我们鼠标放在又上角头像图标上,在弹出框选择AccessKey管理或者直接搜索

申请一个 key-value秘钥 可以理解为远程访问的 账户密码。

3.实践

我主要讲解一些常用 的方法更多的内容需要参考官方文档

阿里云oss官方文档

3.1 创建Maven项目,引入依赖

    <dependencies><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!-- swagger ui --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency><!-- aliyun-oos --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3</version></dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency><!-- apache-common-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version></dependency></dependencies>

3.2 创建oss工具类 实现 查询创建仓库功能 和基本配置信息

package com.dfp.common.aliyun;import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import lombok.Data;
@Data
public class OssUtil {private static String ENDPOINT="你的节点";//外网访问节点private static String AccessKeyID="你的id"; //accIDprivate static String AccessKeySecret="你的密码";//ACCSecretprivate static String BUKETNAME="demotest-dfp2";//仓库名称private static String SUFFER_URL ="http://"+BUKETNAME+"."+ENDPOINT; //上传成功返回的url,仓库名称+节点地址/*** 获取oss链接*/public OSSClient getOSSClient(){OSSClient ossClient=new OSSClient(ENDPOINT,AccessKeyID,AccessKeySecret);//判断是否存在仓库if (ossClient.doesBucketExist(BUKETNAME)){System.out.println("存在仓库");ossClient.shutdown();}else{System.out.println("不存在仓库....创建一个仓库"+BUKETNAME);CreateBucketRequest bucketRequest=new CreateBucketRequest(null);bucketRequest.setBucketName(BUKETNAME);//设置仓库名称bucketRequest.setCannedACL(CannedAccessControlList.PublicRead);//设置仓库权限 公共读ossClient.createBucket(bucketRequest);ossClient.shutdown();}return ossClient;}public static void main(String[] args) {OssUtil util=new OssUtil();util.getOSSClient();}}

我们运行一下main方法

到阿里云的控制台刷新

多了一个仓库地址这样我们就远程创建了一个地址。

4 上传文件(与3.2关系不大)

4.1构建一个较为完整的项目

4.2配置类

package com.dfp.aliyunossdemo.config;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import lombok.Data;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@Data
public class AliyunOSSConfig {private String endPoint="xxxxxxxx";// 地域节点private String accessKeyId="xxxxxxxxx";private String accessKeySecret="xxxxxxxxxxxxxx";private String bucketName="demotest-dfp";// OSS的Bucket名称private String urlPrefix="demotest-dfp.oss-cn-shenzhen.aliyuncs.com";// Bucket 域名private String fileHost="fileTest";// 目标文件夹@Beanpublic OSS OSSClient(){return new OSSClient(endPoint,accessKeyId,accessKeySecret);}
}
package com.dfp.aliyunossdemo.config;import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.util.ArrayList;
import java.util.List;@Configuration
@EnableSwagger2
public class Swagger2Config {@Beanpublic Docket createRestApi() {// 为swagger添加header参数可供输return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.dfp")).paths(PathSelectors.any()).build();
//                .globalOperationParameters();}/*** @Description: 构建 api文档的信息*/private ApiInfo apiInfo() {return new ApiInfoBuilder()// 设置页面标题.title("使用swagger2构建短视频后端api接口文档")// 设置联系人.contact(new Contact("dfp", "http://www.dfp.com", "1156655386@qq.com"))// 描述.description("欢迎访问短视频接口文档,这里是描述信息")// 定义版本号.version("1.0").build();}
}

4.3Service层

package com.dfp.aliyunossdemo.service;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import com.dfp.aliyunossdemo.config.AliyunOSSConfig;
import com.dfp.aliyunossdemo.enums.Result;
import com.dfp.aliyunossdemo.enums.ResultCodeEnum;
import com.dfp.aliyunossdemo.enums.StatusCode;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@Service
public class FileUploadService {//设置允许上传文件格式private static final String[] IMAGE_TYPE=new String[]{".bmp",".jpg",".jpeg",".png",".gif",".mp3",".mp4",".mkv"};@Autowiredprivate OSS ossClient;@Autowiredprivate AliyunOSSConfig aliyunOSSConfig;public String upload(MultipartFile file){String bucketNanme=aliyunOSSConfig.getBucketName();String endPoint = aliyunOSSConfig.getEndPoint();String accessKeyId = aliyunOSSConfig.getAccessKeyId();String accessKeySecret = aliyunOSSConfig.getAccessKeySecret();String fileHost = aliyunOSSConfig.getFileHost();//返回的UrlString returnUrl="";//审核上传文件是否符合规定格式boolean isLegal=false;for (String type:IMAGE_TYPE){if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(),type)){isLegal=true;break;}}if (!isLegal){
//            如果不正确返回错误状态码return StatusCode.ERROR.getMsg();}//获取文件的名称String originalFilename = file.getOriginalFilename();//截取文件类型String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
//        最终保存文件名称String newFileName= UUID.randomUUID().toString()+ fileType;//构建日期路径  ps :oss目标文件夹/yyyy/MM/dd文件名称String filePath=new SimpleDateFormat("yyyy/MM/dd").format(new Date());
//        文件上传文件的路径String uploadUrl=fileHost+"/"+filePath+"/"+newFileName;
//        获取文件输入流InputStream inputStream=null;try{inputStream=file.getInputStream();}catch (IOException e){e.printStackTrace();}//文件上传到阿里云oss
//        ossClient.putossClient.putObject(bucketNanme,uploadUrl,inputStream);//,metareturnUrl="http://"+bucketNanme+"."+endPoint+"/"+uploadUrl;return returnUrl;}}

4.4 异常处理统一返回结果

package com.dfp.aliyunossdemo.enums;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;/*** 全局统一返回结果类*/
@Data
@ApiModel(value = "全局统一返回结果")
public class Result<T> {@ApiModelProperty(value = "返回码")private Integer code;@ApiModelProperty(value = "返回消息")private String message;@ApiModelProperty(value = "返回数据")private T data;public Result(){}protected static <T> Result<T> build(T data) {Result<T> result = new Result<T>();if (data != null)result.setData(data);return result;}public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {Result<T> result = build(body);result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());return result;}public static <T> Result<T> build(Integer code, String message) {Result<T> result = build(null);result.setCode(code);result.setMessage(message);return result;}public static<T> Result<T> ok(){return Result.ok(null);}/*** 操作成功* @param data* @param <T>* @return*/public static<T> Result<T> ok(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.SUCCESS);}public static<T> Result<T> fail(){return Result.fail(null);}/*** 操作失败* @param data* @param <T>* @return*/public static<T> Result<T> fail(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.FAIL);}public Result<T> message(String msg){this.setMessage(msg);return this;}public Result<T> code(Integer code){this.setCode(code);return this;}public boolean isOk() {if(this.getCode().intValue() == ResultCodeEnum.SUCCESS.getCode().intValue()) {return true;}return false;}
}

4.5 控制层

package com.dfp.aliyunossdemo.controller;import com.dfp.aliyunossdemo.enums.Result;
import com.dfp.aliyunossdemo.enums.ResultCodeEnum;
import com.dfp.aliyunossdemo.service.FileUploadService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;import static com.dfp.aliyunossdemo.enums.ResultCodeEnum.DATA_ERROR;
import static com.dfp.aliyunossdemo.enums.ResultCodeEnum.PARAM_ERROR;@Api(description = "阿里云测试文档Api")
@RestController
@RequestMapping("/api/file")
public class TestController {@Autowiredprivate FileUploadService fileUploadService;@ApiOperation(value = "文件上传")@PostMapping("/upload")public Result upload(MultipartFile file)  {String returnFileUrl = null;if (file != null) {returnFileUrl = fileUploadService.upload(file);if (StringUtils.isEmpty(returnFileUrl)){
//                返回路径为空表示异常return Result.fail(DATA_ERROR);}return Result.ok(returnFileUrl);} else {return Result.fail(PARAM_ERROR);}}@PostMapping("/down/{filename}")public Result DownLoad(@PathVariable String filename , HttpServletResponse response){return  null;}/*** 文件删除api* @param: fileName* @return: com.alibaba.fastjson.JSONObject* @create: 2020/10/31 17:35* @author: csp1999*/@ApiOperation(value = "文件删除")@GetMapping("/delete/{fileName}")public JSONObject DeleteFile(@PathVariable("fileName") String fileName) {JSONObject jsonObject = new JSONObject();String status = fileUploadService.delete(fileName);return null;}}

运行项目测试

打开sw2进行测试 localhost:+项目端口号

在浏览器输入这个网址或者在你的阿里云oss控制台看这个图片又就表示成功了

springboot整合阿里云OSS存储(对象存储)图文详解-———入门操作指南。相关推荐

  1. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    SpringBoot整合阿里云OSS文件上传.下载.查看.删除 该项目源码地址:https://github.com/ggb2312/springboot-integration-examples ( ...

  2. SpringBoot整合阿里云OSS

    文章目录 SpringBoot整合阿里云OSS 1.准备工作 1.1 开通"对象存储OSS"服务 1.2 创建Bucket 1.3 创建RAM子用户 2.SpringBoot整合阿 ...

  3. springboot整合阿里云oss上传的方法示例

    这篇文章主要介绍了springboot整合阿里云oss上传的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 OSS申请和 ...

  4. 阿里云 linux服务器安装tomcat(图文详解)

    阿里云 linux服务器安装tomcat(图文详解) 前言 博主昨天搞了jdk,现在就让我们一起来学习怎么在阿里云服务器上安装tomcat吧(注:本文极其适合小白!!! ) ------------- ...

  5. SpringBoot整合阿里云OSS上传文件

    一.需求分析 文件上传是一个非常常见的功能,就是通过IO流将文件写到另外一个地方,这个地方可以是项目下的某个文件夹里,或者是本地电脑某个盘下面,还可以是云服务OSS里面,这里就是我要讲到的OSS,我写 ...

  6. SpringBoot整合阿里云OSS,传入文件为MultipartFile格式文件

    我对普通的人类没有兴趣,你们只要是有外星人.未来人.异世界人.超能力者, 就尽管来找我吧!以上!----<凉宫春日的忧郁> 1. 去阿里云开通个人对象存储OSS服务 点击创建Bucket, ...

  7. springBoot 整合阿里云OSS对象存储封装实现类

    OSS对象存储 阿里云提供针对各种存储资源(块.文件和对象)的低成本.高可靠.高可用的存储服务,涵盖数据备份.归档.容灾等场景.本文介绍阿里云各类存储服务及特性的适用场景.性能.安全.接口和费用模型等 ...

  8. SpringBoot整合阿里云OSS,支持文件上传、下载、删除、加签等操作

    首先附上OSS基本介绍和官方文档链接:https://help.aliyun.com/product/31815.html?spm=ata.21736010.0.0.25d67536bR4cly 另外 ...

  9. SpringBoot 系列教程(九十九):SpringBoot整合阿里云OSS实现文件上传,下载,删除功能

    一.前言 之所以写这篇文章呢? 是因为最近在做文件上传时遇到一个问题,就是我们在以前使用传统Spring+SpringMVC+Mybatis框架开发Web项目的时候,都是将项目打包生成一个War包,然 ...

  10. SpringBoot整合——阿里云对象存储(OSS)

    SpringBoot整合--阿里云对象存储 1 OSS介绍 在开发应用的过程中,我们经常会有用户需要实名认证之后才能访问的需求. 用户认证需要上传证件图片.首页轮播也需要上传图片,因此我们要做文件服务 ...

最新文章

  1. 最常用的css选择器及兼容性 +几个好用却不多见的 nth-child等
  2. Python中的pickle模块
  3. VB中超长OLE数据库字段的操纵方法
  4. tomcat8源码分析-Connector初始化
  5. react学习(58)--this.props进行父子传值
  6. 走近中医 感受神奇
  7. 我本人一直以来犯的错误,在看了 Think In Java 后才抓了出来
  8. 作业帮:字符串反转(头部插入)
  9. tf.Variable、tf.get_variable、tf.variable_scope、tf.name_scope、random、initializer
  10. 谷歌开源漏洞扫描器“海啸”,专为大型企业服务
  11. Fluent Design System 设计语言元素
  12. 蓝桥杯2015年第六届C/C++省赛C组第二题-立方尾不变
  13. 通过EasyRecovery来恢复U盘文件
  14. vsftp客户连接常见故障现象
  15. 前端部分-JSON-对象转换为字符串
  16. ORACLE EBS 启用REST服务-1-环境安装篇
  17. safari调试工具h5手机_iOS通过safari真机调试H5页面
  18. 轻度折腾nuc8i5beh
  19. 自适应网页(响应式布局)+弹性布局
  20. matlab高斯型隶属函数,图高斯型隶属函数.PPT

热门文章

  1. SYD8811/SYD8810 一拖一离线批量烧录板(FD1201)使用说明
  2. win7 共享wifi 手机如何上网
  3. 腾格尔发新歌《遥远的地方》,成都邓秀菊自发红包朋友圈寻歌词
  4. jquery ztree 皮肤(官网介绍)
  5. 野火 FireConfig 配置连接Wifi
  6. 汇编指令:CLD STD MOVS LODS STOS
  7. 微分几何学习(一)(向量函数)
  8. opencv4.0无法打开摄像头_笔记本电脑摄像头打不开怎么办
  9. 用mysql设计一个KTV点歌系统_KTV点歌系统(JAVA+MYSQL)
  10. 计算机磁盘检查,使用磁盘检查工具进行硬盘诊断