热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

scopesystem来依赖_来吧,展示!SpringBootOSS整合全过程,没见过比这更详细的了...

前言阿里云对象存储服务(ObjectStorageService,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不

前言

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低于 99.9999999999%(12 个 9),服务设计可用性(或业务连续性)不低于 99.995%。

OSS 具有与平台无关的 RESTful API 接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

您可以使用阿里云提供的 API、SDK 接口或者 OSS 迁移工具轻松地将海量数据移入或移出阿里云 OSS。数据存储到阿里云 OSS 以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)和归档存储(Archive)作为不经常访问数据的存储方式。

登录阿里云,进入到控制台

6670a3ecb38b46bd9815ed4914ebff43.png

点击确定,就建好了。

  1. 接下来就开始附代码
    新建一个springboot项目
    导入依赖 pom.xml



4.0.0modelVersion>

org.examplegroupId>
SpringOOSartifactId>
1.0-SNAPSHOTversion>



org.springframework.bootgroupId>
spring-boot-starter-webartifactId>
2.3.0.RELEASEversion>
dependency>


org.springframework.bootgroupId>
spring-boot-starter-testartifactId>
testscope>
2.3.0.RELEASEversion>
dependency>



com.aliyun.ossgroupId>
aliyun-sdk-ossartifactId>
3.4.2version>
dependency>


org.projectlombokgroupId>
lombokartifactId>
1.18.4version>
providedscope>
dependency>

joda-timegroupId>
joda-timeartifactId>
2.9.9version>
dependency>


org.apache.commonsgroupId>
commons-lang3artifactId>
3.8.1version>
dependency>

dependencies>
project>

application.yml

## aliyun oss
## 配置说明参考: com.ljq.demo.springboot.common.config.OSSConfig.class
oss:
endpoint: oss-cn-shenzhen.aliyuncs.com
url: https://oos-all.oss-cn-shenzhen.aliyuncs.com/
accessKeyId: #这里在个人中心里accesskeys查看
accessKeySecret: #这里在个人中心里accesskeys查看
bucketName: #这里写OSS里自己创建的OSS文件夹

2fb2da3cbd61ba8f2491ac0205099e21.png

7eb9902b9798359b1f14fcc80c187a31.png

写一个config配置类

package com.sykj.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.io.Serializable;

/**
* @Description: 阿里云 OSS 配置信息
* @Author: jiangpengcheng
* @Date: 2020/07/15
*/
@Data
@Configuration
public class OSSConfig implements Serializable {

private static final long serialVersionUID = -119396871324982279L;

/**
* 阿里云 oss 站点
*/
@Value("${oss.endpoint}")
private String endpoint;

/**
* 阿里云 oss 资源访问 url
*/
@Value("${oss.url}")
private String url;

/**
* 阿里云 oss 公钥
*/
@Value("${oss.accessKeyId}")
private String accessKeyId;

/**
* 阿里云 oss 私钥
*/
@Value("${oss.accessKeySecret}")
private String accessKeySecret;

/**
* 阿里云 oss 文件根目录
*/
@Value("${oss.bucketName}")
private String bucketName;

}

工具类

package com.sykj.util;

import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.model.ObjectMetadata;
import com.sykj.config.OSSConfig;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

/**
* @Description: 阿里云 oss 上传工具类(高依赖版)
* @Author: @author jiangpengcheng
* @Date: 2020/7/15
*/

public class OSSBootUtil {

private OSSBootUtil(){}

/**
* oss 工具客户端
*/
private volatile static OSSClient ossClient = null;

/**
* 上传文件至阿里云 OSS
* 文件上传成功,返回文件完整访问路径
* 文件上传失败,返回 null
* @author jiangpengcheng
* @param ossConfig oss 配置信息
* @param file 待上传文件
* @param fileDir 文件保存目录
* @return oss 中的相对文件路径
*/

public static String upload(OSSConfig ossConfig, MultipartFile file, String fileDir){
initOSS(ossConfig);
StringBuilder fileUrl = new StringBuilder();
try {
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.'));
String fileName = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().substring(0,18) + suffix;
if (!fileDir.endsWith("/")) {
fileDir = fileDir.concat("/");
}
fileUrl = fileUrl.append(fileDir + fileName);
System.out.println(fileUrl+"-----------------");
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");

ossClient.putObject(ossConfig.getBucketName(), fileUrl.toString(), file.getInputStream(),objectMetadata);
} catch (IOException e) {
e.printStackTrace();
return null;
}
fileUrl = fileUrl.insert(0,ossConfig.getUrl());
return fileUrl.toString();
}

/**
* 初始化 oss 客户端
* @param ossConfig
* @return
*/
private static OSSClient initOSS(OSSConfig ossConfig) {
if (ossClient == null ) {
synchronized (OSSBootUtil.class) {
if (ossClient == null) {
ossClient = new OSSClient(ossConfig.getEndpoint(),
new DefaultCredentialProvider(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()),
new ClientConfiguration());
}
}
}
return ossClient;
}

/**
* 根据前台传过来的文件地址 删除文件
* @author jiangpengcheng
* @param objectName
* @param ossConfig
* @return
*/
public static ResponseResult delete(String objectName,OSSConfig ossConfig) {
initOSS(ossConfig);
//将完整路径替换成 文件地址 因为yml里的url有了地址链接https: //oos-all.oss-cn-shenzhen.aliyuncs.com/
// 如果再加上地址 那么又拼接了 所以删除不了 要先把地址替换为 jpc/2020-07-16/1594857669731-51d057b0-9778-4aed.png
String fileName = objectName.replace("https://oos-all.oss-cn-shenzhen.aliyuncs.com/", "");
System.out.println(fileName+"******************************");
// 根据BucketName,objectName删除文件
ossClient.deleteObject(ossConfig.getBucketName(), fileName);

return ResponseResult.ok("删除成功",fileName);
}
}

数据返回工具类

package com.sykj.util;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
* @ClassName ResponseResult
* @Description TODO
* Author JiangPengCheng
* Date 2020/7/15 9:13
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResponseResult implements Serializable {
private Integer code;
private String message;
private Object object;

public static ResponseResult ok(String message){
return new ResponseResult(200,message,null);
}

public static ResponseResult ok(String message, Object object){
return new ResponseResult(200,message,object);
}

public static ResponseResult error(String message){
return new ResponseResult(500,message,null);
}
public static ResponseResult error(String message, Object o){
return new ResponseResult(500,message,o);
}
}

Service类

package com.sykj.service;

import com.sykj.util.ResponseResult;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

/**
* @Description: 公共业务
* @Author: junqiang.lu
* @Date: 2018/12/24
*/
public interface CommonService {

/**
* 上传文件至阿里云 oss
*
* @param file
* @param
* @return
* @throws Exception
*/
ResponseResult uploadOSS(MultipartFile file) throws Exception;

ResponseResult delete(String objectName);
}

Service实现类

package com.sykj.service.impl;

import com.sykj.config.OSSConfig;
import com.sykj.service.CommonService;
import com.sykj.util.OSSBootUtil;
import com.sykj.util.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
* @Description: 公共业务具体实现类
* @Author: junqiang.lu
* @Date: 2018/12/24
*/
@Service("commonService")
public class CommonServiceImpl implements CommonService {

@Autowired
private OSSConfig ossConfig;

/**
* 上传文件至阿里云 oss
*
* @param file
* @param
* @return
* @throws Exception
*/
@Override

public ResponseResult uploadOSS(MultipartFile file) throws Exception {

// 格式化时间
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
String format = simpleDateFormat.format(new Date());
// 高依赖版本 oss 上传工具
String ossFileUrlBoot = null;
/**
* ossConfig 配置类
* file 文件
* "jpc/"+format 上传文件地址 加时间戳
*/
ossFileUrlBoot = OSSBootUtil.upload(ossConfig, file, "jpc/"+format);
System.out.println(ossFileUrlBoot);
Map resultMap &#61; new HashMap<>(16);
// resultMap.put("ossFileUrlSingle", ossFileUrlSingle);
resultMap.put("ossFileUrlBoot", ossFileUrlBoot);

return ResponseResult.ok("上传成功~~",ossFileUrlBoot);
}

&#64;Override
public ResponseResult delete(String objectName) {
ResponseResult delete &#61; OSSBootUtil.delete(objectName, ossConfig);
return delete;
}
}

Controller类

package com.sykj.comtroller;
import com.sun.org.apache.regexp.internal.RE;
import com.sykj.service.CommonService;
import com.sykj.util.ResponseResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
* &#64;Description: 公共模块控制中心
* &#64;Author: junqiang.lu
* &#64;Date: 2018/12/24
*/
&#64;RestController
&#64;RequestMapping("api/demo/common")
public class CommonController {

private static final Logger logger &#61; LoggerFactory.getLogger(CommonController.class);

&#64;Autowired
private CommonService commonService;

/**
* 上传文件至阿里云 oss
*
* &#64;param file
* &#64;param
* &#64;return
* &#64;throws Exception
*/
&#64;RequestMapping(value &#61; "/upload/oss", method &#61; {RequestMethod.POST}, produces &#61; {MediaType.APPLICATION_JSON_VALUE})
public ResponseResult uploadOSS(&#64;RequestParam(value &#61; "file") MultipartFile file) throws Exception {
System.out.println(file.getInputStream());
// ResponseResult responseResult &#61; commonService.uploadOSS(file);

// HttpHeaders headers &#61; new HttpHeaders();
// headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
return ResponseResult.ok("ok");
}

&#64;RequestMapping("/delete/oss")
public ResponseResult deltetOss(String objectName){
System.out.println(objectName&#43;"-------------------------------");
ResponseResult delete &#61; commonService.delete(objectName);
return delete;
}

}

注意postman选择file

22ec8e878c914c0d7ac3cbca80948ad8.png

这样就完成了

最后

感谢你看到这里&#xff0c;每天都会分享java相关技术文章或行业资讯&#xff0c;欢迎大家关注和转发文章&#xff01;

e41324c514bb1be01009e3f74de01165.png




推荐阅读
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
author-avatar
廉杰登_393
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有