java 文件表创建及前后端使用

====表结构task_file====

========前端具体到业务表单==========

 <el-form-item label="任务附件" prop="taskAttachment">
          <el-upload ref="upload" accept=".jpg, .png, .txt, .xlsx, .doc, .docx, .xls, .pdf, .zip, .rar"
            :action="upload.url" multiple :http-request="HttpUploadFile" :headers="upload.headers"
            :file-list="upload.fileList" :on-remove="handleRemove" :on-success="handleFileSuccess"
            :on-change="changeFileList" :data="getfileData()" :auto-upload="false">
            <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
          </el-upload>

        </el-form-item>

参数说明===============

data

upload: {

        // 是否禁用上传

        isUploading: false,

        // 设置上传的请求头部

        headers: { Authorization: "Bearer " + getToken() },

        // 上传的地址

        url: process.env.VUE_APP_BASE_API + "/system/taskFile/upload/task",

        // 上传的文件列表

        fileList: []

      },

=============

:action="upload.url"   上传后端接口

==================

multiple 可多选

==================

:http-request="HttpUploadFile"  增加数据

 HttpUploadFile(file) {

      this.fileData.append('files', file.file); // append增加数据

    },

===============

headers="upload.headers" 请求头

=============

 :file-list="upload.fileList" 文件列表

=======================

:on-remove="handleRemove" 移除文件操作

 handleRemove(file, fileList) {

      this.upload.fileList = fileList

      this.deleteFilePath.push(file.url)

    },

=================

:on-success="handleFileSuccess" 上传成功的操作

  //文件上传成功后的钩子函数

    handleFileSuccess(response, file, fileList) {

      this.upload.isUploading = false;

      this.upload.fileList = []

      this.$modal.msgSuccess(response.msg);

    },

==================

 :on-change="changeFileList" 列表长度改变的操作

  //fileList长度改变时触发

    changeFileList(file, fileList) {

      this.upload.fileList = fileList

      console.log(this.upload.fileList)

    },

======================

:data="getfileData()" 加载数据

  getfileData() {

      //此处的form是表单中的其它绑定值

      return this.form.taskAttachment

    },

=======================

:auto-upload="false" 是否自动上传

========================

==修改提交上传文件==

  this.submitUpload()

 submitUpload() {

      //创建FormData对象,用于携带数据传递到后端

      this.fileData = new FormData()

      this.$refs.upload.submit();

      this.fileData.append("data", JSON.stringify(this.form));

      this.fileData.append("headers", { Authorization: "Bearer " + getToken() });

      this.fileData.append("withCredentials", false)

      this.fileData.append("filename", "file");

      var i = this.upload.fileList.length

      console.log(i)

      if (i !== 0) {

        //此处执行调用发送请求

        uploadFile(this.fileData).then((res) => {

          if (res.code === 200) {

            this.upload.isUploading = false;

            this.upload.fileList = []

            // this.$modal.msgSuccess(res.msg);

            this.open = false;

            this.getList();

          }

        })

      } else {

        this.open = false;

        this.getList();

        //如果没有文件要上传在此处写逻辑

      }

    },

====下载====

 <el-table-column label="任务附件" align="center">

        <template slot-scope="scope">

          <el-link type="primary" style="margin-right:10px" v-for=" item  in  scope.row.taskFileVos " :key="item.fileId"

            @click.prevent="downloadFile(item)">{{ item.oFileName }}</el-link>

        </template>

      </el-table-column>

=============

 downloadFile(item) {

      this.download('system/taskFile/download/resource', {

        filePath: item.filePath,

      }, item.oFileName)

    },

===前端展现===

 <el-table-column label="任务附件" align="center">
        <template slot-scope="scope">
          <el-link type="primary" style="margin-right:10px" v-for=" item  in  scope.row.taskFileVos " :key="item.fileId"
            @click.prevent="downloadFile(item)">{{ item.oFileName }}</el-link>
        </template>

      </el-table-column>

====后端====

构造回显表单构造集成实体类供查询使用

/*文件及文件附件*/
public class TaskVo  extends SysProjectTask {
    private List<TaskFile> taskFileVos;

    public TaskVo(List<TaskFile> taskFileVos) {
        this.taskFileVos = taskFileVos;
    }

    public TaskVo() {
    }

    public List<TaskFile> getTaskFileVos() {

        return taskFileVos;
    }

    public void setTaskFileVos(List<TaskFile> taskFileVos) {

        this.taskFileVos = taskFileVos;
    }




    @Override
    public String toString() {
        return "TaskVo{" +
                "taskFileVos=" + taskFileVos +
                '}';
    }
}

==============

@RestController
@RequestMapping("/taskFile")
public class TaskFileController {

    @Autowired
    private ITaskFileService taskFileService;




    /*任务附件上传*/
    @PostMapping("/upload/task")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult uploadFile(@RequestParam("files") MultipartFile[] files, @RequestParam("data") String data) {
        try {
            //这里的data是同时携带的其它信息就是前端的form里的信息,可以是用下面的json方式解析为自己相应的对象
            System.out.println(data);
            SysProjectTask sysProjectTask = JSONObject.toJavaObject(JSONObject.parseObject(data), SysProjectTask.class);
            // 上传文件路径 E:/ruoyi/uploadPath
            String filePath = RuoYiConfig.getUploadPath();
            System.out.println("========================"+filePath);
            String fileName = "";
            String url = "";
            // 上传并返回新文件名称
            AjaxResult ajax = AjaxResult.success();
            for (int i = 0; i < files.length; i++) {
                /*/profile/upload/2024/03/19/4004308e-fd63-4323-89cc-6a7c8641f148.txt*/
//                fileName = FileUploadUtils.upload(filePath, files[i]);
                fileName = FileUploadUtils.upload(filePath, files[i]);
                url = filePath+fileName;
                TaskFile taskFile = new TaskFile();
                /*任务文件名,保存的名称*/
                taskFile.setTaskName(fileName);
                /*文件保存路径*/
                taskFile.setFilePath(url);
                /*文件原名*/
                taskFile.setoFileName(files[i].getOriginalFilename());
                /*关联任务ID*/
                taskFile.setTaskId(sysProjectTask.getTaskId());
                /*文件大小*/
                taskFile.setFileSize(String.valueOf(files[i].getSize()));
                /*w文件类型*/
                taskFile.setFileType(files[i].getContentType());
                taskFile.setUploadTime(DateUtils.getNowDate());
                taskFile.setProjectId(sysProjectTask.getProjectId());
                taskFileService.insertTaskFile(taskFile);
            }
            return ajax;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return AjaxResult.error(e.getMessage());
        }
    }

    /*通过任务ID去查询任务附件名称*/
    @GetMapping("/read/{taskId}")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult readTaskFile(@PathVariable("taskId") Long taskId) {
        TaskFile taskFile = new TaskFile();
        taskFile.setTaskId(taskId);
        List<TaskFile> taskFiles = taskFileService.selectTaskFileList(taskFile);
        System.out.println(taskFiles);
        List<TaskFileVo> taskFileVos = new ArrayList<>();
        taskFiles.forEach(taskFile1 -> taskFileVos.add(new TaskFileVo(taskFile1)));
        System.out.println(taskFileVos);
        return AjaxResult.success(taskFileVos);
    }



    /**/
    @PostMapping("/upload/updateTaskFile")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult deleteFile(@RequestBody List<String> filePath) {
        try {
            for (String deleteFilePath : filePath) {
                taskFileService.deleteFilePath(deleteFilePath);
                FileUtils.deleteFile(deleteFilePath);
            }
            return AjaxResult.success("修改成功");
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return AjaxResult.error(e.getMessage());
        }
    }


    /**
     * 本地资源通用下载
     */
    @RequiresPermissions("system:task:export")
    @Log(title = "导出附件", businessType = BusinessType.EXPORT)
    @PostMapping("/download/resource")
    public void resourceDownload(String filePath, HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println(filePath);

        response.setCharacterEncoding("utf-8");
        response.setContentType("multipart/form-data");

        FileUtils.writeBytes(filePath, response.getOutputStream());
    }






}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/609177.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言例题39、输入一个正整数,将其反方向逆序输出

#include <stdio.h>void main() {int x;int ge; //个位int result 0;printf("请输入一个正整数&#xff1a;");scanf("%d", &x);while (x > 0) {//解题原理ge x % 10;//每次分解取得个位的数字result result * 10 ge;//个十百千万顺序向左…

限购仅剩6地,透过房价地图看楼市行情!

同一天&#xff0c;两地取消限购&#xff01; 5月9日&#xff0c;继杭州取消限购之后&#xff0c;西安也宣布全面取消住房限购&#xff01; 现在&#xff0c;我们透过几幅楼市数据的分布地图&#xff0c;来看看5月的楼市行情&#xff01; 楼市限购&#xff0c;仅剩6地&#…

YOLOv9改进策略 :一种新颖的通用倒瓶颈(UIB)搜索块助力检测| 轻量化之王MobileNetV4

💡💡💡创新点:轻量化之王MobileNetV4 开源 | Top-1 精度 87%,手机推理速度 3.8ms,原地起飞! 最主要创新:引入了通用倒瓶颈(UIB)搜索块,这是一个统一且灵活的结构,它融合了倒瓶颈(IB)、ConvNext、前馈网络(FFN)以及一种新颖的额外深度可分(ExtraDW)变体技…

【iOS】事件传递与响应机制

文章目录 前言事件UIEvent一、事件传递遍历顺序 二、手势识别三、响应机制UIResponder&#xff08;响应者&#xff09;响应者链 四、相关应用扩大button点击范围穿透事件 总结 前言 提到响应者链与事件传递&#xff0c;如果看过其他人的博客&#xff0c;经常能看到这经典的三张…

《探索信息技术中心一体化系统架构:提升企业数字化转型的效率与能力》

在当今数字化时代&#xff0c;信息技术中心&#xff08;IT Center&#xff09;扮演着至关重要的角色&#xff0c;它不仅是企业的技术支撑&#xff0c;更是推动数字化转型的引擎。为了更好地应对日益复杂的业务需求和技术挑战&#xff0c;许多企业开始探索一体化系统架构&#x…

引用数据类型 栈内存 堆内存

let m { a: 10, b: 20 }; let n m; n.a 15; console.log(m.a) // 15 原因&#xff1a;基本数据类型存储在栈内存中&#xff0c;引用数据类型存储在堆内存中 &#xff0c;引用数据类型存储在堆内存中会在栈内存中创建一个指针&#xff0c;栈内存中的这个指针指向堆内存中的地…

英语学习笔记9——How are you today?

How are you today? 你好吗&#xff1f; 词汇 Vocabulary well adj. 好的 n. 井 fine adj. 美好的 两个方面&#xff1a;天气、身体。 搭配&#xff1a;a fine day 晴朗的一天    It’s a fine day today. 今天很晴朗。 good adj. 好的 口语偏多 搭配&#xff1a;Good jo…

基于光纤技术的新能源汽车电池安全监测--FOM²系统

为什么要进行动力电池包的温度监测&#xff1f; 新能源电动汽车的动力电池包的工作温度&#xff0c;不仅会影响电池包性能&#xff0c;而且直接关系到车辆安全。时有发生的新能源汽车电池包起火事件&#xff0c;对电池包、冷却系统以及电池管理系统&#xff08;BMS&#xff09…

初阶C语言(8) - 实用的调试技巧

1. 什么是bug? bug 是计算机领域专业术语&#xff0c;是计算机在硬件、软件、协议和系统安全策略上存在的缺陷&#xff0c;攻击者能够在未授权情况下访问的危害&#xff0c;世界最早的一批程序设计师之一&#xff0c;美国的葛丽丝霍波在调试设备时出现故障&#xff0c;拆开继电…

Java基础教程 - 6 方法

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 6 方法 方法也可以称之为…

算法day03

第一题 179. 查找总价格为目标值的两个商品 本题采用前后指针和单调性规律可解&#xff1b; 解题思路如下&#xff1a; 1、设置前后指针 2、前后指针所指的两数之和大于目标数&#xff0c;右指针左移&#xff1b; 前后指针所指的两数之和小于目标数&#xff0c;左指针右移&…

软件工程复习之软件定义时期

1.什么是软件&#xff1f; 答&#xff1a;软件是程序&#xff0c;数据和文档的集合。 程序是完成指定功能的计算机可执行的指令序列。 数据是程序进行信息处理的数据结构。 文档是开发&#xff0c;使用&#xff0c;维护的图文资料。 2.软件有何特点&#xff1f; 答&#…

2024年小沙弥小视频,轻松吸引中老年观众,上手简单,轻松月入了万

利用人工智能工具制作小沙弥主题的抖音内容&#xff0c;已成为网络赚钱的新途径。这个项目主要吸引中老年人群体&#xff0c;尤其是对智慧和人生哲理感兴趣的观众。小沙弥以其温馨且启发性的内容&#xff0c;引起中老年用户的共鸣&#xff0c;为他们提供心灵慰藉。 项 目 地 …

上传自己的项目到PyPI

准备工作 已注册pypi账号pypi账号已经配置了双重验证pypi账号的token令牌&#xff08;最后上传到pypi需要这个&#xff09;pip install twine&#xff08;上传需要用到的工具&#xff09; 操作步骤 1、准备好工程2、编写setup.py3、开始上传 大功告成 在pypi查看自己包的…

Linux—— 任务规划、SELinux、ACL、磁盘介绍

任务规划&#xff1a; 未来任务的一次性调度 atatqatrm服务&#xff1a; atd周期性任务的调度 crontab 所有用户的任务列表都以文件的形式存在于系统 /var/spool/cron/用户名-l -e-u-r时间 需要执行的任务服务&#xff1a; crond系统维护任务&#xff1a; yum软件仓库缓存的…

MySQL数据库基础(数据库操作,常用数据类型,表的操作)

MySQL数据库基础&#xff08;数据库操作&#xff0c;常用数据类型&#xff0c;表的操作&#xff09; 前言 数据库的操作1.显示当前数据库2.创建数据库3.使用数据库4.删除数据库 常用数据类型1.数值类型2.字符串类型3.日期类型 表的操作1.查看表结构2.创建表3.删除表 总结 前言 …

5. 分布式链路追踪TracingFilter改造增强设计

前言 在4. 分布式链路追踪客户端工具包Starter设计一文中&#xff0c;我们实现了基础的Starter包&#xff0c;里面提供了我们自己定义的Servlet过滤器和RestTemplate拦截器&#xff0c;其中Servlet过滤器叫做HoneyTracingFilter&#xff0c;仅提供了提取SpanContext&#xff0…

等保测评技术方案

等保&#xff0c;即“网络安全等级保护”&#xff0c;是中国实施的一项信息安全保护制度&#xff0c;旨在对不同重要性的信息和信息系统实行分等级保护&#xff0c;保障国家安全、社会秩序以及公共利益。等保技术方案是指为了达到国家网络安全等级保护标准要求&#xff0c;针对…

Linux的并发与竞争

文章目录 一、并发二、竞争三、保护内容是什么四、解决并发与竞争的几种常用方法1.原子操作原子整型API函数原子位操作 API 函数 2.自旋锁自旋锁格式如下&#xff1a;自旋锁 API 函数自旋锁的使用注意事项 3.信号量信号量 API 函数信号量格式如下&#xff1a; 4.互斥体API函数如…

正交频分复用回顾(通俗易懂)

OFDM我们知道&#xff0c;叫做正交频分复用&#xff0c;它是4G的一个关键技术&#xff0c;4G的多址技术叫做OFDMA&#xff0c;也就是说4G是通过OFDM来作用户区分的&#xff0c;具体是什么意思呢&#xff1f;继续往下看。 图1 在2G和3G时代&#xff0c; 单用户都是用的一个载波…