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

yizhihongxing

以下是"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实现HTML转PDF并导出

    HTML转PDF并导出是一个非常实用的功能,该功能可以将HTML页面转换为PDF文件,并可以将PDF文件导出到本地磁盘或者远程服务器上,实现文档的方便共享和传播。 基于Vue实现HTML转PDF并导出的完整攻略如下: 1. 安装依赖库 首先,需要安装两个重要的依赖库:html2pdf和file-saver。html2pdf是将HTML转化为PDF的主要依赖库…

    Vue 2023年5月27日
    00
  • vue中的虚拟dom知识点总结

    下面是关于“Vue中的虚拟DOM知识点总结”的完整攻略: 什么是虚拟DOM 虚拟DOM是一种通过JS对象描述DOM树结构,实现DOM树的高效更新的技术。Vue中也是采用虚拟DOM来实现数据驱动视图的,Vue会通过模板生成虚拟DOM树,当数据发生变化时,Vue会根据新的数据生成新的虚拟DOM树,并通过Diff算法对比新旧虚拟DOM树的差异,最终最小化DOM操作…

    Vue 2023年5月28日
    00
  • css的面试题目(前端常见面试题)

    下面是关于“css的面试题目(前端常见面试题)”的完整攻略: 一、选择器 请说明 CSS 中的 7 种基本选择器及其用法? 答:CSS 中的 7 种基本选择器包括: 类选择器(class):通过类名选取元素,以 . 开头。 id 选择器:通过 ID 名称选取元素,以 # 开头。 标签选择器:通过 HTML 元素名称选取元素,如 p、h1、div 等。 后代选…

    Vue 2023年5月29日
    00
  • 解决vue中reader.onload读取文件的异步问题

    解决Vue中reader.onload读取文件的异步问题可以考虑以下两种方法: 方法一:使用Promise 当我们想要在Vue中对reader.onload事件进行操作时,由于它是异步的,我们可以使用Promise将其转换为同步的操作。具体步骤如下: 创建一个方法,用于处理异步操作: function readMyFile(file) { return ne…

    Vue 2023年5月28日
    00
  • 分分钟玩转Vue.js组件

    欢迎来到Vue.js组件的完整攻略!在这里,我将教会你如何使用Vue.js创建和使用组件。 为什么使用Vue.js组件? Vue.js是一个被广泛使用的JavaScript框架,通过组件化的方式来构建应用程序。使用Vue.js组件化开发,具有以下几个优点: 组件可以在应用程序中重复使用。 组件可以被其他组件引用和组成更复杂的应用程序。 组件可以减少代码的冗余…

    Vue 2023年5月27日
    00
  • vue.js实现备忘录功能的方法

    下面我来详细讲解一下“vue.js实现备忘录功能的方法”的完整攻略。 1. 确定页面结构 首先需要在页面中确定备忘录的展示位置或容器。此处推荐使用<div>标签做为备忘录的容器,所有备忘录信息都将渲染到这个容器中。 <div id="memos"></div> 2. 创建数据模型 接下来要创建备忘录的数…

    Vue 2023年5月27日
    00
  • Vue.js实现列表清单的操作方法

    针对”Vue.js实现列表清单的操作方法”,我会提出以下攻略步骤并提供两个相关的代码示例: 一、 定义列表项组件: 使用Vue.js,我们可以定义一个组件,用于渲染列表中的单个项。组件应该有两个props,一个用于接收数据数组,一个用于接收点击事件的回调函数,用于处理单击事件。该组件的代码示例如下: <template> <li v-for…

    Vue 2023年5月27日
    00
  • Vue echarts模拟后端数据流程详解

    下面是详细讲解 “Vue echarts模拟后端数据流程详解”的完整攻略,包含以下步骤: 1. 安装相关依赖 要使用Vue和echarts,首先需要安装Vue和echarts的相关依赖。使用npm安装如下: npm install –save vue npm install –save echarts 2. 在Vue中引入echarts 为了在Vue中使…

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