Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)

主要思路

上传图片的思路有两种:

  • 第一种是上传到应用服务器,再由应用服务器上传到OSS。这种适合上传的文件较小,较为简单,但文件过大会造成服务器压力变大。

  • 第二种是利用签名直传的方式,较为复杂,但能减轻服务器的压力。

直接上传到应用服务器的方式

0.导入依赖

除去常规的依赖还需要以下依赖:

  <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version></dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version></dependency>

1.写配置

这里的配置主要是为了方便后面修改,可以直接利用读取配置文件的方式编写工具类,需要用到这些阿里云的相关参数时直接调用工具类即可。四个主要的属性需要参照自己实际情况来填写。

aliyun.oss.file.endpoint=<endpoint>
aliyun.oss.file.keyid=<keyid>
aliyun.oss.file.keysecret=<keysecret>
aliyun.oss.file.bucketname=<bucketname>

2.写工具类

编写一个工具类,读取配置文件,其中InitializingBean是为了复制给public静态变量,afterPropertiesSet()会在容器加载完后执行。

@Component
public class OssUtil implements InitializingBean {@Value("${aliyun.oss.file.endpoint}")private String endpoint;@Value("${aliyun.oss.file.keyid}")private String accessKeyID;@Value("${aliyun.oss.file.keysecret}")private String accesskeySecret;@Value("${aliyun.oss.file.bucketname}")private String bucketName;public static String END_POINT;public static String ACCESS_KEY_ID;public static String ACCESS_KEY_SECRET;public static String BUCKET_NAME;@Overridepublic void afterPropertiesSet() throws Exception {END_POINT = endpoint;ACCESS_KEY_ID = accessKeyID;ACCESS_KEY_SECRET = accesskeySecret;BUCKET_NAME = bucketName;}
}

3.编写Controller和Service

完整的包结构:

编写Controller:其中CrossOrigin是为了解决跨域请求的问题,这里会调用service的上传方法,返回一个url,这样,我们就可以把这个url存进数据库了。

@RestController
@RequestMapping("/cat")
@CrossOrigin
public class OSSController {@Autowiredprivate OSSService ossService;@PostMapping("/oss/upload")public String upload(@RequestPart("file") MultipartFile file){String url = ossService.uploadFile(file);return url;}
}

编写service:这里只展示实现类

@Service
public class OSSServiceImpl implements OSSService {@Overridepublic String uploadFile(MultipartFile file) {String url = null;String endpoint = OssUtil.END_POINT;String accessKeyId = OssUtil.ACCESS_KEY_ID;String accessKeySecret = OssUtil.ACCESS_KEY_SECRET;String bucketName = OssUtil.BUCKET_NAME;OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {InputStream inputStream = file.getInputStream();//获取上传的文件的名字String filename = file.getOriginalFilename();//随机uuid是为了拼接文件名,防止用户上传两个名字相同的文件后覆盖掉前一个UUID uuid = UUID.randomUUID();//这里是为了按上传时间分配目录。精确到月String s = DateTime.now().toString("yyyy/MM/");//拼接成完整的文件名。filename = s + uuid + filename;//传入三个参数ossClient.putObject(bucketName, filename, inputStream);//拼接urlurl = "https://" + bucketName + "." + endpoint + "/" + filename;} catch (IOException e) {e.printStackTrace();}finally {ossClient.shutdown();}return url;}
}

4.测试

启动项目,浏览器访问http://localhost:8080/swagger-ui/ 进行接口测试

上传文件:

上传成功:

阿里云oss控制台就可以看到相应的文件了:

Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)相关推荐

  1. PHP上传大文件视频到阿里云oss分片上传

    下载阿里云oss的SDK composer require aliyuncs/oss-sdk-php 上传视频,我用的是分片上传,其实阿里云的文档已经写得很清楚了,不过这是当我把上传的功能写出来后才这 ...

  2. C#阿里云oss接口上传和下载文件

    一  前期准备工作:需要获取阿里云的:endpoint, accessKeyId, accessKeySecret这三个参数值,可以登录阿里云账号获取到. 再一个就是项目中需要引入阿里云的接口文件Al ...

  3. 阿里云oss视频上传后,如何获取视频封面

    前言:在阿里云oss视频上传后,我们如何获取视频封面呢?而不是通过上传方式获取封面.其实OSS本身提供了视频截帧功能 OSS提供的视频截帧功能和OSS图片服务功能使用的方式是类似的,都是通过传入x-o ...

  4. 阿里云 OSS监控上传进度

    阿里云 OSS监控上传进度 阿里云上传进度SDK 使用阿里云带进度条的上传,然后将长传进度存入session // 带进度条的上传ossClient.putObject(new PutObjectRe ...

  5. 【24-业务开发-基础业务-品牌管理-图片管理-阿里云OSS服务开通和使用-阿里云OSS服务API使用-SpringCloudAlibaba OSS服务的使用】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  6. apache字体文件跨域_在CabloyJS中将Webpack生成的文件自动上传到阿里云OSS

    背景 阿里云OSS提供了一个Webpack插件,可在Webpack打包结束后将webpack生成的文件自动上传到阿里云OSS中 下面看看在CabloyJS中如何使用该插件 新建项目,并配置MySQL连 ...

  7. C# ASP.NET MVC 图片上传的多种方式(存储至服务器文件夹,阿里云oss)

    图片上传时我们进场用到的一个功能今天将他整理了一下写了个demo希望对大家有用 该demo分为如下 1.上传至至服务器文件夹 2.上传至阿里云oss 3.百度webupload上传图片 效果图如下: ...

  8. django图片上传到oss_django 配置阿里云OSS存储media文件的例子

    1. 安装django-aliyun-oss2-storage包 linux上用 pip install django-aliyun-oss2-storage 无报错,顺利安装 windows上报错: ...

  9. 【上传文件】基于阿里云的视频点播VOD、对象存储OSS实现音视频图片等文件上传

    一.效果演示 a.测试界面初始化 b.点击[上传视频] c.点击[开始上传] d.点击[上传音频]选择音频之后点击[开始上传] c.点击[上传图片],注意图片上传为单按钮,选择文件之后自动完成上传 d ...

  10. vue+node.js操作阿里云OSS,上传和删除文件

    效果图 一.上传文件 二.删除文件 第一步,引入依赖 npm install ali-oss --save 第二步,写OSS配置文件(server/oss.js) 这里需要在阿里云开通子账号,赋予相应 ...

最新文章

  1. ACL 2022录用结果出炉:国内多支团队晒“战绩”,清华一实验组18篇入选
  2. 哪里可以接到python的活干-越忙越穷?赶紧把瞎忙活的事情交给Python吧!
  3. Python3需要安装的MySQL库是mysqlclient
  4. close 不弹出对话框
  5. 引入redis报错Bean method ‘redisConnectionFactory‘ not loaded because @ConditionalOnClass did not find
  6. C++ 高级数据类型(一)—— 数组
  7. NET分页实现及代码
  8. VK Cup 2012 Round 1 D. Distance in Tree (树形dp)
  9. sqlite3---终端操作
  10. 2021-09-1427. 移除元素
  11. SQL之SQL99语法 没错就这么简单
  12. 用python删除pdf文件的特定页码
  13. 网页中的一键加QQ群、唤起QQ群聊天窗口
  14. Java角度制向弧度制转化
  15. 你需要权限来执行此操作 你需要来自Administrators的权限才能对此文件夹进行更改
  16. 名帖315 沈尹默 行书《兰亭序》书轴
  17. php 备份手机通讯录,怎么把手机上的号码复制到SIM卡上
  18. 查看jvm进程cpu火焰图工具
  19. 关闭mac开机当的一声的终极方法
  20. 虚拟机非正常关闭,里面的服务器重启报错:Error, some other host already uses address...

热门文章

  1. linux用shell写正则表达式,Linux命令行与Shell脚本编程大全-shell正则表达式
  2. python 命令模式_python 设计模式之命令模式
  3. oracle比较强大的函数,SQL和ORACLE函数比较
  4. 大数据可视化陈为智慧树_智慧树知到_大数据可视化_答案新版
  5. 计算机基础知识 笔试,计算机基础知识笔试题
  6. linux日志报multipath,linux device mapper multipath 驱动的路径聚合
  7. maven配置项目根路径_Maven基本概念——根目录、项目创建、坐标
  8. 优化mysql的21个建议_MySQL优化小建议
  9. putty 32位_了解linux系统远程操作软件,putty的安装过程!
  10. Java LinkedHashMap 逆序遍历