当前位置: 首页 > news >正文

如何在Spring Boot中实现图片上传至本地和阿里云OSS

在开发Web应用时,处理文件上传是常见的需求之一,尤其是在涉及到图片、视频等多媒体数据时。本文将详细介绍如何使用Spring Boot实现图片上传至本地服务器以及阿里云OSS存储服务,并提供完整的代码示例。

一、上传图片至本地

首先,我们来看如何在Spring Boot项目中实现图片上传至本地的功能。这通常涉及接收前端发送的文件流,然后将其保存到服务器上的指定目录。

代码示例:

@RestController
public class FileController {@PostMapping("/upload")public Result upload(MultipartFile file) throws IOException {String originalFilename = file.getOriginalFilename();String filename = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));file.transferTo(new File("D:\\img\\" + filename));return Result.success();}
}

上述代码中,MultipartFile用于接收上传的文件,通过transferTo()方法将文件保存到本地磁盘。

二、上传图片至阿里云OSS

当应用需要处理大量或大体积的文件时,使用云存储服务如阿里云OSS可以显著提高系统的稳定性和可扩展性。下面是如何在Spring Boot中集成阿里云OSS并上传文件的步骤。

引入依赖:

在pom.xml中添加以下依赖以支持阿里云OSS和JDK 9以上的环境。

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency>
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>

封装工具类:

创建一个工具类AliOssUtil来处理与OSS的交互,包括上传文件。

public class AliOssUtil {private static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";private static final String ACCESS_KEY_ID="XXXXXXXXXXXXXXXX";private static final String ACCESS_KEY_SECRET="XXXXXXXXXXXXXXXXXXXXXX";private static final String BUCKET_NAME = "XXXXXXXXXX";public static String uploadFile(String objectName, InputStream in) throws Exception {OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);try {PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, in);PutObjectResult result = ossClient.putObject(putObjectRequest);String url = "https://" + BUCKET_NAME + "." + ENDPOINT.substring(ENDPOINT.lastIndexOf("/") + 1) + "/" + objectName;return url;} finally {ossClient.shutdown();}}
}

Controller代码:

修改FileController,使用AliOssUtil上传文件。

@RestController
public class FileController {@PostMapping("/upload")public Result upload(MultipartFile file) throws Exception {String originalFilename = file.getOriginalFilename();String filename = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));String url = AliOssUtil.uploadFile(filename, file.getInputStream());return Result.success(url);}
}

在这里插入图片描述

通过上述步骤,你可以轻松地在Spring Boot应用中实现文件上传至本地和阿里云OSS的功能。这不仅提高了应用的灵活性,还优化了资源管理,使得大规模文件存储更加高效。

相关文章:

  • 【前端项目笔记】1 登录与登出功能实现
  • react 0至1 【jsx】
  • 探索开源世界:2024年值得关注的热门开源项目推荐
  • 基于Python的数据可视化大屏的设计与实现
  • 深度神经网络——图像分类如何工作?
  • StarNet实战:使用StarNet实现图像分类任务(一)
  • String常用方法详解
  • AI大模型会让搜索引擎成为历史吗?
  • 一个在C#中集成Python的例子
  • Mac M3 Pro安装Hadoop-3.3.6
  • C# OpenCvSharp 逻辑运算-bitwise_and、bitwise_or、bitwise_not、bitwise_xor
  • 聊天页面样式
  • vue element-ui 下拉框 以及 input 限制输入,小数点后保留两位 界面设计案例 和 例子:支持mp4和m3u8视频播放
  • 【机器学习】基于Transformer架构的移动设备图像分类模型MobileViT
  • Wall国内开源程序照片墙,支持VR全景及安装教程
  • Angular Elements 及其运作原理
  • Babel配置的不完全指南
  • interface和setter,getter
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Redis 懒删除(lazy free)简史
  • 从PHP迁移至Golang - 基础篇
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 码农张的Bug人生 - 初来乍到
  • 微服务入门【系列视频课程】
  • 一个SAP顾问在美国的这些年
  • 追踪解析 FutureTask 源码
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • const的用法,特别是用在函数前面与后面的区别
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​人工智能书单(数学基础篇)
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #《AI中文版》V3 第 1 章 概述
  • (LeetCode 49)Anagrams
  • (Matlab)使用竞争神经网络实现数据聚类
  • (python)数据结构---字典
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)JAVA使用POI操作excel
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (蓝桥杯每日一题)love
  • (四)Controller接口控制器详解(三)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ... 是什么 ?... 有什么用处?
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Framework杂记
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 读取 JSON格式的数据
  • .NET 使用配置文件
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET/C# 使窗口永不获得焦点
  • .pop ----remove 删除
  • @RequestBody与@ResponseBody的使用