20计科张鑫 2024-05-09 13:51 采纳率: 0%
浏览 25

如何实现基于springboot+vue文件上传与下载

img

求各位指教,想实现文件上传下载预览的功能,前端页面如上图。搜索了很多方法,都各有千秋,在本人这里可能不太实用,本人使用的是axios+springboot+vue实现,想问有无通用方法呢,后端实现与前端对接卡在这里很久了。

1.前端页面


```java
<template>
  <el-main>
    <!-- 搜索 -->
    <el-form
        :model="searchParm"
        label-width="80px"
        :inline="true"
        size="default"
    >
      <el-form-item style="width: 240px">
        <el-input
            v-model="searchParm.title"
            placeholder="请输入标题"
        ></el-input>
      </el-form-item>
      <el-form-item label="类型">
        <el-select
            v-model="searchParm.types"
            clearable
            placeholder="请选择搜索类型"
            style="width: 160px"
        >
        </el-select>
      </el-form-item>
  <el-form-item>
    <el-button icon="Search" @click="searchBtn">搜索</el-button>
    <el-button plain type="danger" icon="Close" @click="resetBtn">重置</el-button>
    <el-button type="primary" icon="Plus" @click="addBtn">上传</el-button>
  </el-form-item>
    </el-form>
  <!-- 表格 -->
  <el-table :height="tableHeight" :data="tableList" border stripe>
    <el-table-column align="center" prop="id" label="id"></el-table-column>
    <el-table-column align="center" prop="fileName" label="文件名称"></el-table-column>
    <el-table-column align="center" prop="types" label="文件类型"></el-table-column>
    <el-table-column align="center" prop="isImg" label="是否为图片"></el-table-column>
    <el-table-column align="center" prop="downcounts" label="下载次数"></el-table-column>
    <el-table-column prop="createTime" width="103px" label="上传时间"></el-table-column>
    <el-table-column align="center" width="240" label="操作">
      <template #default="scope">
        <el-button
            icon="Edit"
            type="success"
            size="default"
            @click="applyBtn(scope.row)"
        >预览</el-button>
        <el-button
            icon="Delete"
            type="danger"
            size="default"
            @click="deleteBtn(scope.row)"
        >删除</el-button>
      </template>
    </el-table-column>
  </el-table>
  <!-- 分页 -->
  <el-pagination
      @size-change="sizeChange"
      @current-change="currentChange"
      :current-page.sync="searchParm.currentPage"
      :page-sizes="[10,20, 40, 80, 100]"
      :page-size="searchParm.pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="searchParm.total" background>
  </el-pagination>
  </el-main>
</template>

<script setup lang="ts">

import useTableDocument from "@/composable/document/useTableDocument";
import {ref} from "vue";

const {resetBtn,currentChange,sizeChange,searchBtn,tableHeight,tableList,getList,searchParm}=useTableDocument();

</script>

<style scoped>

</style>



表单组件

import {ref} from "vue";
import {nextTick, onMounted, reactive} from "vue";
export default function useTableDocument(){
//表格数据
    const tableList = ref([{
        id:"1",
        fileName:"22.txt",
        types:"txt",
        isImg:"否",
        downcounts:4,
        createTime:"2024/5/9",
    }])
    //定义表格高度
    const tableHeight = ref(0)
    //搜索栏绑定数据
    const searchParm = reactive({
        currentPage:1,
        pageSize:10,
        name:'',
        total:0
    })

    //列表
    const getList = ()=>{

    }
    //页容量改变时触发
    const sizeChange = (size:number)=>{
        searchParm.pageSize = size
        getList()
    }
    // 页数改变时触发
    const currentChange = (page:number)=>{
        searchParm.currentPage = page
        getList()
    }
    //搜索
    const searchBtn = ()=>{
        getList()
    }
    //重置
    const resetBtn = () => {
        searchParm.currentPage = 1
        searchParm.name = ''
        getList()
    }
    onMounted(()=>{
        getList()
        nextTick(()=>{
            tableHeight.value = window.innerHeight - 200
        })
    })

    return {
        tableHeight,
        tableList,
        getList,
        resetBtn,
        searchBtn,
        currentChange,
        sizeChange,
        searchParm
    }
}

```

  • 写回答

6条回答 默认 最新

  • 专家-皆知 2024-05-09 13:51
    关注

    引自免费微信小程序:皆我百晓生

    你可以通过Spring Boot配置一个文件存储路径,使用MultipartFile处理文件上传;对于下载,读取存储的文件并设置响应头供前端下载。前端Vue使用axios发送POST请求上传文件,GET请求下载,并处理预览链接。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月9日

悬赏问题

  • ¥15 .net项目集成阿里云智能语音SDK
  • ¥15 c#关于WPS中网格线隐藏的属性
  • ¥100 请教一道在hcl模拟器上配置ospf的题
  • ¥15 在Sqlserver 使用OPENQUERY查询链接数据库MySQL
  • ¥50 如何给网页加一个必须阅读几秒后才可以点击确定的公告弹窗
  • ¥15 人脐静脉内皮细胞(HEUVC)重悬后自动聚团,怎么解决?
  • ¥30 faiss 的 IndexFlatL2 相似性搜索
  • ¥15 pycharm中cv2安装后可以用但是无法补全或跳转函数,搜索后使用以下方法无效1.重新安装包(更换版本也不行,如何解决?
  • ¥15 如何关闭Win11文件资源管理器的搜索栏的预选词
  • ¥15 odoo17非生产订单产品出库整个业务流程处理