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 Element前端应用开发之前端API接口的封装

    下面我将详细讲解“Vue Element前端应用开发之前端API接口的封装”的完整攻略。 什么是前端API接口封装? 前端API接口封装是指将后端数据处理和数据访问的过程进行简化,屏蔽数据格式等细节,将需要的数据以简单直观的方式暴露给前端业务代码使用。可以通过封装来降低前端调用后端接口和处理返回数据时的复杂度,提高代码的可读性和可维护性。 前端API接口封装…

    Vue 2023年5月28日
    00
  • vue3中的透传attributes教程示例详解

    下面是关于“vue3中的透传attributes教程示例详解”的完整攻略。 什么是attributes 在Vue.js中,组件是可拆分复用的代码块,但每个组件都有自己的特定属性。对于父组件传递到子组件的所有属性,Vue.js 2.x 中都会绑定到子组件实例上的 $attrs 对象上。这种绑定方式在一些情况下会有一些不良影响,例如难以调试错误、性能瓶颈等。而V…

    Vue 2023年5月28日
    00
  • Vue之组件详解

    Vue之组件详解 什么是组件? 在Vue中,组件就是将一个页面拆分成若干部分,每个部分拥有真正意义上的独立性。 Vue组件通过把一个页面拆分成若干个块(模块),每一个块之间传递数据等操作成为独立的组件,实现了代码分割,提升代码复用率,可以使我们专注于每一个模块,而不会被其他模块干扰。 组件的基本使用方法 Vue组件的一个重要特点就是:数据驱动,组件通过pro…

    Vue 2023年5月29日
    00
  • Vue数字输入框组件的使用方法

    下面是使用Vue数字输入框组件的完整攻略。 1. 确定Vue数字输入框组件的使用场景 Vue数字输入框组件可以用于需要获取数字输入的场景,如商家价格设置、购物车商品数量选择等。 2. 安装Vue数字输入框组件 可以通过npm安装Vue数字输入框组件: npm install vue-numeric-input –save 3. 引入Vue数字输入框组件 在…

    Vue 2023年5月27日
    00
  • Vue使用electron转换项目成桌面应用方法介绍

    Vue使用Electron转换项目成桌面应用方法介绍 Electron是基于Chromium和Node.js开发的流行桌面应用开发框架,它可以让你使用前端技术(如HTML、CSS和JavaScript)开发出桌面应用。而Vue是一款易用、高效的前端框架,它可以让我们快速构建响应式、可维护的Web应用程序。将二者结合起来,可以让我们更加高效地开发出高质量的桌面…

    Vue 2023年5月28日
    00
  • vue slot与传参实例代码讲解

    本文将为大家详细讲解Vue中slot与传参的使用方法及实例代码讲解。 什么是Vue中的Slot 在Vue中,我们可以使用组件来构建我们的应用程序。组件允许我们将结构、样式和行为封装在一个可重用的组合单元中。 在某些情况下,我们需要一个组件在父组件中形成一个布局,在不了解内容的情况下。这时,Vue中的插槽(slot)就能派上用场。插槽提供了组件的一种占位符,允…

    Vue 2023年5月28日
    00
  • vue项目前端埋点的实现

    下面是关于“vue项目前端埋点实现”的完整攻略: 什么是前端埋点? 前端埋点是指在页面中添加一些跟踪代码,记录用户行为、操作等数据,并将这些数据发送到后台进行统计分析的过程。前端埋点可以用来了解用户的兴趣、行为习惯等,方便网站开发者及时发现问题,为优化网站提供数据支持。 前端埋点的实现方式 前端埋点的实现方式通常有两种,一种是通过在路由钩子函数中进行埋点,另…

    Vue 2023年5月29日
    00
  • vue给数组中对象排序 sort函数的用法

    当需要对数组中的对象按照某个属性进行排序时,可以使用Vue中的sort函数。sort函数可接受一个比较函数作为参数来排序。 下面是Vue中sort函数的用法: array.sort(compareFunction) 其中,array 表示待排序的数组,compareFunction 是一个可选的比较函数,用来指定数组排序规则,如果不指定,则元素按照字符串变量…

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