springboot集成阿里OSS上传文件
开发前的准备:
自己在阿里云上申请免费的Oss对象存储,新建Bucket---读写权限选择公共读,我开始这里忘了导致后来踩了小坑
接下来是代码中的一些配置:我用的是springboot
1》添加pom依赖:
<!--OSS上传--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3</version></dependency>
2》yml配置:
oss:endpoint: http://oss-cn-hangzhou.aliyuncs.comaccessKeyId: 你自己的---阿里云右上角头像点击选择可以获取accessKeySecret: 你自己的---阿里云右上角头像点击选择可以获取bucketName: tao11140------你自己创建的bucket节点key: group1/pic-----------目录前缀webserver: https://tao11140.oss-cn-hangzhou.aliyuncs.com
3》添加配置类:
OssProperties:
@Data
@ConfigurationProperties(prefix = "oss")
public class OssProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;private String key;private String webserver;
}
OssConfig:
Configuration
@EnableConfigurationProperties(OssProperties.class)
public class OssConfig {@Autowiredprivate OssProperties ossProperties;@Beanpublic OSSClient getOSSClient(){ClientConfiguration conf=new ClientConfiguration();// Set the maximum number of allowed open HTTP connectionsconf.setMaxConnections(1000);conf.setConnectionTimeout(600000);conf.setSocketTimeout(600000);OSSClient client = new OSSClient(ossProperties.getEndpoint(),ossProperties.getAccessKeyId(),ossProperties.getAccessKeySecret(),conf);return client;}}
OssClientUtils:
@Component
public class OssClientUtils {@Autowiredprivate OssConfig ossConfig;@Autowiredprivate OssProperties ossProperties;/*** 上传图片* @param file* @param nfixName* @param schoolId* @return*/public String uploadPic(MultipartFile file, String nfixName, Long schoolId, String module){String result=""; //返回图片路径OSSClient ossClient =null;String key=assembleOssPath(schoolId,module,nfixName); //目标oss文件路径try {ossClient=ossConfig.getOSSClient();PutObjectResult tip=ossClient.putObject(ossProperties.getBucketName(), key, new ByteArrayInputStream(file.getBytes()));if(tip!=null && !"".equals(tip.getETag())) {
// result = key;result = ossProperties.getWebserver() + "/" + key;}}catch (Exception ex){ex.printStackTrace();}return result;}public String uploadPic(MultipartFile file, String nfixName, String module){String result=""; //返回图片路径OSSClient ossClient =null;String key=assembleOssPath(module,nfixName); //目标oss文件路径try {ossClient=ossConfig.getOSSClient();PutObjectResult tip=ossClient.putObject(ossProperties.getBucketName(), key, new ByteArrayInputStream(file.getBytes()));if(tip!=null && !"".equals(tip.getETag())) {
// result = key;result = ossProperties.getWebserver() + "/" + key;}}catch (Exception ex){ex.printStackTrace();}return result;}private List<MultipartFile> getFileList(HttpServletRequest request, String key){//创建一个通用的多部分解析器CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();//判断 request 是否有文件上传,即多部分请求if (!multipartResovler.isMultipart(request)) {//无附件上传return null;}// 转型为MultipartHttpRequest:MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;// 获得文件:List<MultipartFile> files = multipartRequest.getFiles(key);System.out.println(files.size());return files;}public String uploadImage(HttpServletRequest request, String module) {Map<String, MultipartFile> files = this.getFileMap(request);String result = "";if (files == null || files.keySet().size() <=0) {return result;}for(String key : files.keySet()){MultipartFile file = files.get(key);// 获取文件名String uploadFileName = file.getOriginalFilename();if(StringUtils.isBlank(uploadFileName)){return result;}//不带.的后缀String nfixName = uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);result = this.uploadPic(file, nfixName, module);return result;}return null;}public Map<String, MultipartFile> getFileMap(HttpServletRequest request){//创建一个通用的多部分解析器CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();//判断 request 是否有文件上传,即多部分请求if (!multipartResovler.isMultipart(request)) {//无附件上传return null;}// 转型为MultipartHttpRequest:MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;// 获得文件:Map<String, MultipartFile> files = multipartRequest.getFileMap();return files;}//组装上传路径private String assembleOssPath(Long schoolId,String ossConstant,String suffix){return ossProperties.getKey()+schoolId+ossConstant+ UUID.randomUUID().toString().replace("-", "")+"."+suffix;}private String assembleOssPath(String ossConstant,String suffix){return ossProperties.getKey()+ossConstant+ UUID.randomUUID().toString().replace("-", "")+"."+suffix;}}
4》测试Controller:
@Api(value="OssController",description="oss上传文件测试",tags={"oss上传文件测试"})
@RestController
@RequestMapping("oss")
public class OssController {@Autowiredprivate OssClientUtils ossClientUtils;@RequestMapping(value = "uploadPic",method = RequestMethod.POST)public String uploadOss(HttpServletRequest request,String path) {return ossClientUtils.uploadImage(request, path);}
}
至此,代码已经准备完毕,接下来postman本地模拟上传图片看看:
postman需要这么传:
首先传参需要传递需要自定义保存的路径,我这里是test
设置Headers:
选择上传文件:
发送请求后,报错:
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/disk/DiskFileItemFactory
解决:
缺少pom依赖:
<!-- common --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><!-- 上传文件开始 --><dependency><groupId>net.sf.staccatocommons</groupId><artifactId>commons-io</artifactId><version>1.2</version></dependency><!-- 上传文件结束 -->
再次发送请求:
OK图片上传成功,返回图片路径
浏览器中访问显示:
<Error>
<Code>AccessDenied</Code>
<Message>You do not have read permission on this object.</Message>
<RequestId>5D78AA96EBEC9441BEB05BA1</RequestId>
<HostId>tao11140.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
神码,竟然没有权限???赶紧去阿里云后台看了下,图片确实是上传成功了
那么可能是要设置一个全局的读取权限
在oss后台的基础设置中找到读写权限,更改为公共读即可
接下来我尝试上传一个apk文件到oss,大概一兆多的大小,结果报错:
The field file exceeds its maximum permitted size of 1048576 bytes.
查看文档之后,原因可能是springboot限制了单次请求的文件大小
解决:
Spring Boot1.4版本后配置更改为:
spring.http.multipart.maxFileSize = 10Mb
spring.http.multipart.maxRequestSize=100Mb
Spring Boot2.0之后的版本配置修改为:
spring.servlet.multipart.max-file-size = 10MB
spring.servlet.multipart.max-request-size=100MB
我的yml添加配置如下:如果是想要不限制文件上传的大小,那么就把两个值都设置为-1就行
spring:servlet:multipart:max-file-size: 10MBmax-request-size: 100MB
之后重新请求上传apk,上传成功
至此,springboot集成oss文件上传圆满成功
springboot集成阿里OSS上传文件相关推荐
- SpringBoot整合阿里云OSS上传文件
一.需求分析 文件上传是一个非常常见的功能,就是通过IO流将文件写到另外一个地方,这个地方可以是项目下的某个文件夹里,或者是本地电脑某个盘下面,还可以是云服务OSS里面,这里就是我要讲到的OSS,我写 ...
- SringBoot集成阿里云OSS上传文件
上一篇文章讲了如何将文件从linux同步到阿里云的oss有兴趣的小伙伴可以去看看,这篇文章讲述如何将文件上传到阿里云oss上,本文只详细写出后端java代码示例,前端和无用代码都会省略,可以上传文件, ...
- thinkPHP 阿里云OSS 上传文件、直接下载
阿里云OSS 上传文件.直接下载 1. 安装OSS SDK composer require aliyuncs/oss-sdk-php 2. thinkPHP接口 public function up ...
- 阿里云OSS上传文件以及获取文件
1.新建bucket (文件存储空间名称),bucket下也可以继续创建目录 2.通过短信验证码创建accessKey,保存accessKeyID和accessKeySecret: 3.添加oss管理 ...
- 阿里云OSS上传文件并返回文件地址
目录 依赖添加 实体类: OSS配置类: OSSUtil工具类: OSS上传接口类: OSS上传接口实现类: OSS上传控制类: 工具类: 依赖添加 在Maven的pom.xml文件中添加OSS的依赖 ...
- 阿里云OSS上传文件时,如何显示上传网速
阿里云OSS上传文件时,如何显示上传网速 业务场景 用户上传时,网速很慢,或者在上传大文件时,虽然有进度条,但是动的很慢,或者不明显,用户会产生困惑. 所以就产生了一个显示网速的需求点. 实现方式 E ...
- Java实现阿里云OSS上传文件
推荐:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.. 点击跳转到网站 1.准备工作:创建操作阿里云OSS许可证 阿里云官方文档 这里不再赘述,根据官方文档一步步的 ...
- Android Oss上传文件简单使用
一.oos简介 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务. 官网文档地址 :https://help.a ...
- javascript 手机移动端 微信 拍照 录音 录视频并阿里oss上传
调用照相机,拍照 <input type="file" accept="image/*" capture="camera"> 1 ...
最新文章
- 把浮点数转为字符串(隐形把数据进行四舍五入)
- Storm【技术文档】-Worker Executor Task的关系
- random.next_Java Random next()方法与示例
- 面试官不讲武德,竟然问了我18个JVM问题!
- 内外网切换软件_不需要软件,用命令简单实现内外网切换指定网段走哪条线路...
- Android学习路线(适合学生)
- Unity之VideoPlayer组件——循环播放视频
- C++学生信息管理系统
- Sitemesh前段框架基础
- Matlab GUI设计——文件读取和保存uigetfile,uiputfile
- o2o模式主要利用在哪些领域 企业怎么发展o2o模式?
- 青海干部网络学院 自动学习网站
- EasyGBS国标视频云服务平台可以获取录像却无法播放是什么原因?
- win10电池图标不能调亮度_win10屏幕亮度无法调节?一招解决Win10电脑亮度调节失灵...
- 收藏:国产服务器和处理器架构
- 第十二章 齐桓公不计前嫌用良才 管夷吾庙堂陈谋论国是
- matlab粒子群加约束条件_matlab粒子群编程,等式约束如何加入
- 软件开发php代码规范,php开发规范_PHP代码编写规范
- jQuery 鼠标指针 悬浮在文字上提示信息
- 程序员工具网站(比较有意思)