1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > springboot整合阿里云OSS存储(对象存储)图文详解-———入门操作指南。

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

时间:2024-02-13 22:57:37

相关推荐

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

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>mons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version></dependency></dependencies>

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

package mon.aliyun;import com.aliyun.oss.OSSClient;import com.aliyun.oss.model.CannedAccessControlList;import com.aliyun.oss.model.CreateBucketRequest;import lombok.Data;@Datapublic 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@Datapublic 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-";// Bucket 域名private String fileHost="fileTest";// 目标文件夹@Beanpublic OSS OSSClient(){return new OSSClient(endPoint,accessKeyId,accessKeySecret);}}

package com.dfp.aliyunossdemo.config;import mon.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@EnableSwagger2public 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", "", "1156655386@"))// 描述.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 .URLEncoder;import java.text.SimpleDateFormat;import java.util.Date;import java.util.UUID;@Servicepublic 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: /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控制台看这个图片又就表示成功了

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