springboot结合vue实现文件上传下载功能

紧接着上一次的博客,这次来实现一下文件(主要是图片)的上传和下载功能,上一次的博客如下所示:

Springboot集成JWT token实现权限验证-CSDN博客

其实文件的上传和下载功能(后端的部分),在我之前的博客就已经有写了,所以这一次我们更加关注前端部分,还有要知道前后端在这个模块是怎么交互的,之前的博客如下所示:

springboot项目学习-瑞吉外卖(4)-CSDN博客

话不多说,上代码! 

1.文件处理类-FileController 

package com.kuang.controller;


import com.kuang.common.Result;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;

//上传
@RestController
@RequestMapping("/file")
public class FileController {

    //将配置文件中的存储路径赋值给filePath
    @Value("${picture.path}")
    private String filePath;

    //获取"localhost"
    @Value("${ip}")
    private String ip;

    //获取"8082"
    @Value("${server.port}")
    private String port;

    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {
        //获取文件原始名称
        String originalFilename = file.getOriginalFilename();
        //获取文件后缀(含这个".")
        String suffixFileName = originalFilename.substring(originalFilename.lastIndexOf("."));
        //使用UUID重新给文件命名,为了防止重名
        String currentFileName = UUID.randomUUID().toString() + suffixFileName;
        //创建一个文件目录对象
        File dir = new File(filePath);
        //如果这个路径不存在,就创建一个
        if (!dir.exists()){
            dir.mkdir();
        }
        //将file指向的文件移动到由basePath+fileName指定的新路径
        file.transferTo(new File(filePath + currentFileName));
        //返回文件链接,这个链接就是文件的下载地址,这个下载地址是后台提供的
        String url = "http://localhost:8082/file/download/" + currentFileName;
        System.out.println(url);
        return Result.success(url);
    }


//下载
    @GetMapping("/download/{fileName}")
    public void download(@PathVariable String fileName, HttpServletResponse response) throws IOException {
        try {
            //输入流(读取文件内容)
            FileInputStream fileInputStream = new FileInputStream(new File(filePath + fileName));

            //输出流(将文件写回浏览器,在浏览器展示图片)
            //这里不new一个输出流,而是用response来get一个输出流,因为要返回给浏览器
            ServletOutputStream outputStream = response.getOutputStream();

            //设置响应类型(类型为图片)
            response.setContentType("image/jpg");

            //通过输入流来读取文件
            byte[] bytes = new byte[1024];
            int length = 0;
            //如果length不为-1表示还没有读完,则一边读一边写
            while((length = fileInputStream.read(bytes)) != -1) {
                //向浏览器写文件内容,从0开始写到length为止
                outputStream.write(bytes,0,length);
            }

            //关闭资源
            fileInputStream.close();
            outputStream.close();

        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}

2.前端图片上传样式

  <div style="margin-left: 80px;margin-bottom: 20px">
        <el-upload
            class="avatar-uploader"
            action="http://localhost:8082/file/upload"
            :headers="{token:user.token}"
            :show-file-list="false"
            :on-success="handleAvatarSuccess">
          <img v-if="user.avatar" :src="user.avatar" class="avatar">
          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
        </el-upload>
      </div>

下面来简单介绍下程序:

上面的user,是从localStorage中获取的,如下:

响应事件程序如下:

methods:{
    handleAvatarSuccess(response,file,fileList){
      console.log(response)
      this.user.avatar = response.data;
    },

官方明确表示,这个函数的参数默认有三个,response表示文件上传之后,后端响应给前端的数据,file表示上传的文件对象,fileList是一个数组,表示所有已经上传的文件对象

 3.整个过程

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot和Vue都是非常流行的开发框架,两者的结合可以为我们带来出色的开发体验。本文主要介绍如何使用Spring Boot和Vue实现docx文件的上传和下载功能文件上传 文件上传是常见的功能之一,我们可以使用Spring Boot在后端实现功能。下面是实现步骤: 1. 首先,在Spring Boot中引入相关依赖,如spring-boot-starter-web、spring-boot-starter-tomcat、spring-boot-starter-validation等。 2. 创建一个RestController,在该控制器中编写文件上传接口,在该接口中使用@RequestParam注解来接收上传的文件。 3. 在前端Vue中创建文件上传组件,并通过axios库实现文件上传。在上传文件时,需要确保发送的Content-Type为multipart/form-data。 文件下载 文件下载也是常见的功能之一,我们可以使用Spring Boot在后端实现功能。下面是实现步骤: 1. 创建一个RestController,在该控制器中编写文件下载接口,使用@RequestParam注解来接收文件的名称或ID。 2. 在接口方法中,使用Java IO流来读取文件,然后返回响应体。 3. 在前端Vue中创建文件下载组件,通过axios库向后端发送文件下载请求,然后使用浏览器下载文件。 总结 通过以上步骤,我们可以很容易地实现docx文件的上传和下载功能。事实上,Spring Boot和Vue都提供了丰富的API和插件来简化开发和加速迭代。因此,我们可以结合两者的优点实现更华丽的Web应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值