开发前的准备:

自己在阿里云上申请免费的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上传文件相关推荐

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

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

  2. SringBoot集成阿里云OSS上传文件

    上一篇文章讲了如何将文件从linux同步到阿里云的oss有兴趣的小伙伴可以去看看,这篇文章讲述如何将文件上传到阿里云oss上,本文只详细写出后端java代码示例,前端和无用代码都会省略,可以上传文件, ...

  3. thinkPHP 阿里云OSS 上传文件、直接下载

    阿里云OSS 上传文件.直接下载 1. 安装OSS SDK composer require aliyuncs/oss-sdk-php 2. thinkPHP接口 public function up ...

  4. 阿里云OSS上传文件以及获取文件

    1.新建bucket (文件存储空间名称),bucket下也可以继续创建目录 2.通过短信验证码创建accessKey,保存accessKeyID和accessKeySecret: 3.添加oss管理 ...

  5. 阿里云OSS上传文件并返回文件地址

    目录 依赖添加 实体类: OSS配置类: OSSUtil工具类: OSS上传接口类: OSS上传接口实现类: OSS上传控制类: 工具类: 依赖添加 在Maven的pom.xml文件中添加OSS的依赖 ...

  6. 阿里云OSS上传文件时,如何显示上传网速

    阿里云OSS上传文件时,如何显示上传网速 业务场景 用户上传时,网速很慢,或者在上传大文件时,虽然有进度条,但是动的很慢,或者不明显,用户会产生困惑. 所以就产生了一个显示网速的需求点. 实现方式 E ...

  7. Java实现阿里云OSS上传文件

    推荐:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.. 点击跳转到网站 1.准备工作:创建操作阿里云OSS许可证 阿里云官方文档 这里不再赘述,根据官方文档一步步的 ...

  8. Android Oss上传文件简单使用

    一.oos简介  阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务. 官网文档地址 :https://help.a ...

  9. javascript 手机移动端 微信 拍照 录音 录视频并阿里oss上传

    调用照相机,拍照 <input type="file" accept="image/*" capture="camera"> 1 ...

最新文章

  1. 把浮点数转为字符串(隐形把数据进行四舍五入)
  2. Storm【技术文档】-Worker Executor Task的关系
  3. random.next_Java Random next()方法与示例
  4. 面试官不讲武德,竟然问了我18个JVM问题!
  5. 内外网切换软件_不需要软件,用命令简单实现内外网切换指定网段走哪条线路...
  6. Android学习路线(适合学生)
  7. Unity之VideoPlayer组件——循环播放视频
  8. C++学生信息管理系统
  9. Sitemesh前段框架基础
  10. Matlab GUI设计——文件读取和保存uigetfile,uiputfile
  11. o2o模式主要利用在哪些领域 企业怎么发展o2o模式?
  12. 青海干部网络学院 自动学习网站
  13. EasyGBS国标视频云服务平台可以获取录像却无法播放是什么原因?
  14. win10电池图标不能调亮度_win10屏幕亮度无法调节?一招解决Win10电脑亮度调节失灵...
  15. 收藏:国产服务器和处理器架构
  16. 第十二章 齐桓公不计前嫌用良才 管夷吾庙堂陈谋论国是
  17. matlab粒子群加约束条件_matlab粒子群编程,等式约束如何加入
  18. 软件开发php代码规范,php开发规范_PHP代码编写规范
  19. jQuery 鼠标指针 悬浮在文字上提示信息
  20. 程序员工具网站(比较有意思)

热门文章

  1. 关于克苏鲁神话的细节
  2. 面向对象的C++了解
  3. 【DB笔试面试733】在Oracle中,RAC中REMOTE_LISTENER的作用是什么?
  4. 【 malcolmcrum】基于Java后端与Typescript前端的代码自动生成
  5. 关于别名(alias)的尴尬
  6. zzuli OJ 1088: 手机短号 (多实例)
  7. 鼠标垫测试软件,百款鼠标垫测试(项目)
  8. MySQL在服务里找不到(未卸载)
  9. python 修改excel 路径_python更改已存在excel文件的方法
  10. ARTIX-7 XC7A35T实验项目之 串口发送