首页 > 其他分享 >使用 Vue3、TypeScript 和 Spring Boot 实现文件上传至 MinIO 和 OSS

使用 Vue3、TypeScript 和 Spring Boot 实现文件上传至 MinIO 和 OSS

时间:2024-09-25 22:53:05浏览次数:10  
标签:文件 TypeScript MinIO Spring Boot file import 上传

目录

《使用 Vue3、TypeScript 和 Spring Boot 实现文件上传至 MinIO 和 OSS》

一、技术选型

二、环境搭建

三、前端实现

四、后端实现

五、代码解析


在现代 web 应用开发中,文件上传是一个常见的需求。本文将介绍如何使用 Vue3、TypeScript 和 Spring Boot 实现文件上传功能,并将文件上传至 MinIO 和 OSS(Object Storage Service,对象存储服务)。

一、技术选型

  1. 前端:Vue3 和 TypeScript 提供了强大的前端开发框架,具有高效的组件化开发模式和良好的类型安全。
  2. 后端:Spring Boot 是一个流行的 Java 开发框架,简化了企业级应用的开发过程。
  3. 对象存储:MinIO 和 OSS 是两种常用的对象存储服务,提供了可靠的存储和高可用性。

二、环境搭建

  1. 安装 Vue CLI:使用 npm 安装 Vue CLI,这是一个用于快速搭建 Vue 项目的工具。

   npm install -g @vue/cli

  1. 创建 Vue 项目:使用 Vue CLI 创建一个 Vue3 和 TypeScript 项目。

   vue create my-project --preset vue-next-typescript

  1. 安装依赖:在 Vue 项目中,安装所需的依赖,如 axios 用于发送 HTTP 请求。

   npm install axios

  1. 安装 Spring Boot:如果还没有安装 Spring Boot,可以通过 Maven 或 Gradle 构建工具创建一个 Spring Boot 项目。
  2. 添加依赖:在 Spring Boot 项目中,添加所需的依赖,如 MinIO 和 OSS 的客户端库。

三、前端实现

  1. 创建上传组件:在 Vue 项目中,创建一个文件上传组件。可以使用input元素的type="file"属性来选择文件。

   <template>
     <div>
       <input type="file" @change="onFileChange">
     </div>
   </template>

   <script lang="ts">
   import { defineComponent } from 'vue';
   import axios from 'axios';

   export default defineComponent({
     methods: {
       onFileChange(event: any) {
         const file = event.target.files[0];
         if (file) {
           this.uploadFile(file);
         }
       },
       async uploadFile(file: File) {
         const formData = new FormData();
         formData.append('file', file);
         try {
           const response = await axios.post('/upload', formData, {
             headers: {
               'Content-Type': 'multipart/form-data'
             }
           });
           console.log(response.data);
         } catch (error) {
           console.error(error);
         }
       }
     }
   });
   </script>

  1. 发送上传请求:使用 axios 发送文件上传请求到后端接口。在请求头中设置Content-Typemultipart/form-data,表示上传的是文件数据。

四、后端实现

  1. 配置 MinIO 和 OSS:在 Spring Boot 项目中,配置 MinIO 和 OSS 的连接信息,如访问密钥、秘密密钥、端点等。

   import io.minio.MinioClient;
   import org.springframework.beans.factory.annotation.Value;
   import org.springframework.context.annotation.Bean;
   import org.springframework.context.annotation.Configuration;

   @Configuration
   public class MinioConfiguration {

       @Value("${minio.endpoint}")
       private String endpoint;

       @Value("${minio.accessKey}")
       private String accessKey;

       @Value("${minio.secretKey}")
       private String secretKey;

       @Bean
       public MinioClient minioClient() {
           return MinioClient.builder()
                  .endpoint(endpoint)
                  .credentials(accessKey, secretKey)
                  .build();
       }
   }

  1. 文件上传接口:创建一个文件上传接口,接收前端传来的文件数据,并将文件上传至 MinIO 或 OSS。

   import io.minio.MinioClient;
   import org.springframework.beans.factory.annotation.Autowired;
   import org.springframework.web.bind.annotation.PostMapping;
   import org.springframework.web.bind.annotation.RequestParam;
   import org.springframework.web.bind.annotation.RestController;
   import org.springframework.web.multipart.MultipartFile;

   @RestController
   public class FileUploadController {

       @Autowired
       private MinioClient minioClient;

       @PostMapping("/upload")
       public String uploadFile(@RequestParam("file") MultipartFile file) {
           try {
               minioClient.putObject("my-bucket", file.getOriginalFilename(), file.getInputStream(), file.getContentType());
               return "File uploaded successfully";
           } catch (Exception e) {
               return "Error uploading file: " + e.getMessage();
           }
       }
   }

五、代码解析

  1. 前端部分
    • 在 Vue 组件中,使用input元素的change事件来监听文件选择。当用户选择文件时,触发onFileChange方法。
    • onFileChange方法中,获取选择的文件,并调用uploadFile方法进行文件上传。
    • uploadFile方法中,创建一个FormData对象,将文件添加到FormData中。然后使用 axios 发送 POST 请求到后端的/upload接口,上传文件数据。
  2. 后端部分
    • 在 MinIO 配置类中,使用@Value注解从配置文件中读取 MinIO 的连接信息,并创建一个MinioClient bean。
    • 在文件上传控制器中,使用@Autowired注解注入MinioClient。在uploadFile方法中,接收前端传来的文件数据,使用MinioClientputObject方法将文件上传至指定的桶中。

通过以上步骤,我们实现了使用 Vue3、TypeScript 和 Spring Boot 实现文件上传至 MinIO 和 OSS 的功能。在实际应用中,可以根据具体需求进行调整和扩展。

标签:文件,TypeScript,MinIO,Spring,Boot,file,import,上传
From: https://blog.csdn.net/m0_57836225/article/details/142534505

相关文章

  • 【毕设作品】SpringBoot公寓管理系统
    文章目录前言题目技术栈功能概述功能结构图实现页面截图系统测试系统测试目的系统功能测试系统测试结论文章参考我的优势代码参考数据库参考源码获取前言❤️博主简介:全网累计学员1000+,培训机构讲师、全栈开发工程师、知乎/小红书优秀作者、腾讯云/阿里云VIP客户、......
  • Spring事务
    文章目录1.Transactional注解2.事务进阶2.1rollbackFor2.1propagation1.Transactional注解@Transactional作用:就是在当前这个方法执行开始之前来开启事务,方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常,就会进行事务的回滚操作。@Transa......
  • 基于SpringBoot+Vue的毕业生实习与就业管理系统设计与实现毕设(文档+源码)
            大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的毕业生实习与就业管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb SSMSpringBoot等等项目框架,源码丰富,欢迎咨询。 一、项目介绍       ......
  • 基于SpringBoot+Vue的毕业设计成绩管理系统设计与实现毕设(文档+源码)
            大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的毕业设计成绩管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb SSMSpringBoot等等项目框架,源码丰富,欢迎咨询。 一、项目介绍        传......
  • Java毕业设计:基于Springboo律师事务所预约网站毕业设计源代码作品和开题报告怎么写
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • Java毕业设计:基于Springboot网球场地预约网站管理系统毕业设计源代码作品和开题报告怎
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • spring boot的发展历程
    SpringBoot的发展历程:2013年:SpringBoot项目开始研发,旨在简化Spring应用的初始搭建以及开发过程。2014年4月:发布SpringBoot1.0.0版本,引入了“约定大于配置”的理念,简化了Spring应用的配置和部署。2015年:发布SpringBoot1.2版本,引入了对servlet3.1、tomcat8、jetty9的支......
  • springboot+vue杂志销售系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网应用的普及,传统杂志销售模式正面临着前所未有的挑战与机遇。传统纸质杂志的销售依赖于实体书店、报刊亭等渠道,不仅成本高、效率低,且难以精准触达目标读者群体。同时,数字化阅读趋势的兴起,使得读者对于杂......
  • springboot+vue优选社区电商平台【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和智能手机的普及,电子商务已成为人们日常生活不可或缺的一部分。近年来,社区电商作为一种新兴的电商模式,凭借其贴近消费者、快速响应需求、降低物流成本等优势,迅速崛起并受到广泛关注。特别是在新冠疫情的影响下,社......
  • springboot+vue在线图书分享与交易平台【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和数字化阅读的普及,传统的图书借阅与交易模式正逐步向线上转移。在线图书分享与交易平台应运而生,旨在打破地域限制,促进图书资源的有效流通与共享。当前,虽然市场上已存在多个图书电商平台和数字图书馆,但专注于......