SpringBoot+Vue.js实现前后端分离的文件上传功能

以下是"SpringBoot+Vue.js实现前后端分离的文件上传功能"的完整攻略:

1. 前置条件

  • 已安装好Java开发环境和Maven构建工具
  • 已创建好一个基于SpringBoot的Web项目
  • 已安装好Vue.js前端框架

2. 实现后端文件上传功能

2.1. 添加Multipart依赖

在项目的pom.xml文件中添加Multipart依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-el</artifactId>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-websocket</artifactId>
  <scope>provided</scope>
</dependency>

2.2. 添加文件上传API

在项目的Controller中添加文件上传API:

@RestController
@RequestMapping("/api")
public class FileController {
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public String upload(MultipartFile file) {
        // 文件上传逻辑
        return "文件上传成功!";
    }
}

2.3. 启用Multipart配置

在启动类中开启Multipart配置:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        // 单个文件最大容量
        factory.setMaxFileSize(DataSize.ofMegabytes(10));
        // 总共最大容量
        factory.setMaxRequestSize(DataSize.ofMegabytes(50));
        return factory.createMultipartConfig();
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3. 实现前端文件上传功能

3.1. 新建上传组件

在Vue.js项目的src/components目录下新建Upload.vue文件,添加如下代码:

<template>
  <div class="upload">
    <input type="file" ref="fileInput" @change="changeHandler" />
  </div>
</template>

<script>
export default {
  name: "Upload",
  data() {
    return {
      file: null,
    };
  },
  methods: {
    changeHandler(event) {
      this.file = event.target.files[0];
      this.upload();
    },
    upload() {
      let formData = new FormData();
      formData.append("file", this.file);
      fetch("/api/upload", {
        method: "POST",
        body: formData,
      })
        .then((response) => {
          console.log(response.text());
        })
        .catch((error) => {
          console.log(error);
        });
    },
  },
};
</script>

<style>
.upload {
  cursor: pointer;
}
</style>

3.2. 在页面中使用上传组件

在需要使用上传功能的页面中,引入Upload组件并在模板中使用:

<template>
  <div>
    <Upload />
  </div>
</template>

<script>
import Upload from "@/components/Upload.vue";

export default {
  name: "Home",
  components: {
    Upload,
  },
};
</script>

<style scoped></style>

至此,就可以实现前后端分离的文件上传功能了。

示例1:后端单个文件上传

@RestController
@RequestMapping("/api")
public class FileController {
    private static final String UPLOAD_PATH = "/Users/username/upload/";

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public String upload(MultipartFile file) {
        if (!file.isEmpty()) {
            String fileName = file.getOriginalFilename();
            try {
                byte[] bytes = file.getBytes();
                Path path = Paths.get(UPLOAD_PATH + fileName);
                Files.write(path, bytes);
                return "File " + fileName + " uploaded successfully!";
            } catch (IOException e) {
                return "Fail to upload " + fileName;
            }
        } else {
            return "File is empty!";
        }
    }
}

示例2:前端多文件上传

<template>
  <div>
    <Upload @fileSelected="selectHandler"></Upload>
    <br>
    <div v-for="(item, index) in fileList" :key="index">
      <img :src="item.url" width="100"/>
    </div>
  </div>
</template>

<script>
import Upload from "@/components/Upload.vue";

export default {
  name: "Home",
  components: {
    Upload,
  },
  data() {
    return {
      fileList: [],
    };
  },
  methods: {
    selectHandler(files) {
      for (let i = 0; i < files.length; i++) {
        this.fileList.push({
          url: URL.createObjectURL(files[i]),
        });
      }
    }
  },
};
</script>

<style scoped></style>

希望这些说明能够对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot+Vue.js实现前后端分离的文件上传功能 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue自定义指令详细

    Vue自定义指令详细攻略 Vue提供了许多内置指令用于操作DOM元素,如v-if、v-show、v-bind等。但是,如果我们想要自定义一些不同于Vue提供的指令来操作DOM元素,该怎么做呢?这时候,Vue的自定义指令就派上用场了。 自定义指令的基本使用 Vue允许开发者自定义指令,只需要在Vue实例中的directives选项中注册即可。 自定义指令需要定…

    Vue 2023年5月27日
    00
  • vue项目中使用骨架屏的方法

    为了让用户在等待页面加载的过程中获得更好的体验,我们可以在Vue项目中使用骨架屏。下面是具体的操作步骤。 步骤1. 安装依赖 我们需要安装vue-skeleton-webpack-plugin这个插件来实现骨架屏的效果。可以使用以下命令进行安装: npm install vue-skeleton-webpack-plugin –save-dev 步骤2. …

    Vue 2023年5月28日
    00
  • 浅谈super-vuex使用体验

    浅谈super-vuex使用体验 super-vuex是一款基于Vuex的状态管理插件,它可以简化Vuex的使用方式,提高提交和获取数据的效率。 安装 在使用super-vuex之前,需要先进行安装。可以通过npm或yarn来进行安装: npm install super-vuex –save 或 yarn add super-vuex 快速开始 在使用s…

    Vue 2023年5月29日
    00
  • vite + react +typescript 环境搭建小白入门教程

    下面是”vite + react +typescript 环境搭建小白入门教程”的完整攻略: 1. 安装 Node.js Node.js是运行在服务器端的JavaScript运行环境,需要先安装好这个软件才可以进行后续的搭建。在Node.js官方网站下载相应的可执行安装程序,然后按照指引进行安装。 2. 初始化项目 打开一个命令行终端,进入项目所在目录,并执…

    Vue 2023年5月28日
    00
  • 使用Vue-cli3.0创建的项目 如何发布npm包

    下面我将详细讲解使用Vue-cli3.0创建的项目如何发布npm包的完整攻略。 1. 创建Vue-cli3.0项目 使用Vue-cli3.0创建一个Vue项目,可以通过以下命令进行创建: vue create my-project 该命令会在当前目录下创建一个名为my-project的Vue项目。 2. 编写组件 在my-project项目中,使用Vue框架…

    Vue 2023年5月28日
    00
  • 使用Vue开发自己的Chrome扩展程序过程详解

    使用Vue开发自己的Chrome扩展程序 开发Chrome扩展程序可以用于个性化配置Chrome浏览器功能,同时也是Chrome浏览器生态中非常重要的一部分。本篇文章将会向你详细讲解如何使用Vue开发自己的Chrome扩展程序。 准备工作 首先,需要安装最新版的Node.js和 Vue CLI工具。安装完成后,使用以下命令创建一个基于 Vue 的 Chrom…

    Vue 2023年5月27日
    00
  • vue给对象动态添加属性和值的实例

    下面是详细讲解“vue给对象动态添加属性和值的实例”的完整攻略: 1. 前置知识 在使用Vue开发过程中,我们经常需要动态给对象添加属性和值。Vue提供了内置方法Vue.set和this.$set来实现对象属性的动态添加。 2. 使用Vue.set Vue提供了Vue.set方法来实现给对象动态添加属性和值,其语法如下: Vue.set(object, ke…

    Vue 2023年5月28日
    00
  • 微前端qiankun改造日渐庞大的项目教程

    我们来详细讲解一下“微前端qiankun改造日渐庞大的项目教程”: 一、前期准备 首先需要了解什么是微前端以及 qiankun 框架的使用方法,建议先阅读qiankun 官方文档和微前端的相关文章。 其次,需要先对原有系统代码进行分析,找出哪些部分需要进行微前端改造,比如将一些独立的模块作为子应用嵌入到主应用中,或者将原有的模块拆分成多个子应用,让其独立运行…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部