vue开发者必看!实现文件上传,前后端完整版

项目中展示的效果

        如下图,上传自己的附件,有要求上传类型,以及上传的大小

一、后端文件上传

 @PostMapping("/upload")
    public AjaxResult uploadFile(@RequestParam(name = "file",value = "file") MultipartFile file) throws Exception {
        try {
            // 上传文件路径
            String filePath = RuoYiConfig.getUploadPath();
            // 上传并返回新文件名称
            String fileName = FileUploadUtils.upload(filePath, file);
            String url = serverConfig.getUrl() + fileName;
            AjaxResult ajax = AjaxResult.success();
            ajax.put("url", url);
            ajax.put("fileName", fileName);
            ajax.put("newFileName", FileUtils.getName(fileName));
            ajax.put("originalFilename", file.getOriginalFilename());

            return ajax;
        } catch (Exception e) {
            return AjaxResult.error(e.getMessage());
        }
    }

二、前端代码 

在写api接口的时候,需要注意文件上传的请求头(url是根据我实际中的项目路径写的)

export function uploadFile(data){
  return request({
    url:'/system/applications/upload',
    method:'post',
    headers:{
      'Content-Type':'multipart/form-data;',
    },
    data: data
  });
}

接下来就是前端页面的代码,

采用的是el-upload进行文件的上传,

http-request:是自定义文件上传(在项目中根据实际情况),

on-success:文件上传成功

on-error:文件上传失败

before-upload:在上传文件之前的判断,比如说判断上传的文件的大小是否是在规定区域,上传的文件的类型是否是规定的doc类型

multiple:limit:是限制上传文件的数量

on-exceed:代表着文件上传的限制,比如说,你已经上传了一份文件,如果再次上传就会限制,给出警告

<el-upload
          class="upload-demo"
          action=""
          :http-request="handleFileUpload"
          :on-success="handleSuccess"
          :on-error="handleError"
          :before-upload="beforeUpload"
          multiple
          :limit="1"
          :on-exceed="handleExceed"
         >
          <el-button slot="trigger" size="small" type="primary">上传附件简历</el-button>
          <div slot="tip" class="el-upload__tip">只能上传dox,doxc文件,且不超过500kb</div>
        </el-upload>

具体的实现逻辑:如下代码 

 beforeUpload(file) {
      const isDocxOrDoc = file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || file.type === 'application/msword';
      const isLt2M = file.size / 1024 / 1024 < 0.5;
      if (!isDocxOrDoc) {
        this.$message.error('只能上传.docx,.doc文件!');
      }
      if (!isLt2M) {
        this.$message.error('上传文件大小不能超过 500KB!');
      }
      return isDocxOrDoc && isLt2M;
    },
    // 手动发送文件上传请求
    async handleFileUpload(file) {
      try {
        const response = await uploadFile(file); // 调用定义的API方法,并传入文件对象
        if (response.code === 200) {
       this.handleSuccess(response,file);
        } else {
        this.handleError('文件上传失败') // 显示错误信息
        }
      } catch (error) {
        console.error('文件上传失败:', error);
      }
    },
    handleSuccess(response,file,fileList) {
      console.log('上传成功:', response);
      this.form.fileurl=response.url
    },
    handleError(err, file, fileList) {
      console.error('上传失败:', err);
    },
    handleExceed(files, fileList) {
      // 当选择的文件超过限制时的处理逻辑
      this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
    },

在文件上传的过程中,因为还涉及到其他的新增,所以在handleSucess中需要this.form.fileurl=response.url,这里的form是表单,将返回的url赋值给表单中的fileurl,实现在文件上传和内容的新增操作。

基于SpringBoot+Vue开发的前后端分离开发模板源码+sql数据库+使用说明(含了登陆注册、用户管理、部门管理、文件管理、权限管理等功能) 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【备注】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 本软件是**基于 Vue 和 SpringBoot 的前后端分离开发模板**,包含了**登陆注册、用户管理、部门管理、文件管理、权限管理、日志管理、个人中心、数据字典和代码生成**这九个功能模块,另外还有两张样例数据表和五张样例数据图,是一个很好的前后端分离开发模板,开发者可以在这个模板上进行二次开发,只需要实现需求方的业务逻辑,即可快速成型甲方的业务需求。 本系统采用了**基于角色的访问控制**,角色和菜单关联,一个角色可以配置多个菜单权限;然后再将用户和角色关联,一位用户可以赋予多个角色。这样用户就可以根据角色拿到该有的菜单权限,更方便管理者进行权限管控。 本系统还**封装了文件管理功能**,在其他模块如若要实现图片/文件上传预览时,前端只需导入现成的 Vue 组件即可实现(使用 viewerjs 依赖实现),后端只需定义 String 类型的实体类变量即可,无需再去研究文件上传预览的相关功能,简化了开发者的工作量。 本系统还自带**基于 beetl 代码生成器**功能,开发者只需要输入类名(如 Student)和类备注(如学生),运行 main 函数即可自动生成后端的所有 MVC 结构代码,无需开发增删改查的 API 接口。对于前端开发者只需输入后端实体类的完整路径,利用 Java 的反射原理,拿到后端实体类的字段,即可自动生成前端所有代码,生成的模块代码包含基础的增删改查功能,简化开发者的工作量。 部署说明 前端: **Node.js 18,Vue 2.7.10,组件库 View UI 4.7**(如使用低版本 node,需自行降低 plugin 版本)。 后端:**JDK 17 及以上版本,Maven 3.6,SpringBoot 3.1.0,mybatis-plus 3.5.3.1**(因 SpringBoot 3 最低支持 JDK 17,所以项目不支持 JDK 8)。 数据库:**MySQL 8.0.33,Redis 5.0.14**(MySQL5.7 需要手动设置编码 UFT8,并修改 sql 文件编码,否则 a_user 表数据无法导入导致用户不能登录)。 ```javascript // 前端(VsCode) // 1. 下载安装 Node.js(18 版本) // 2. 安装 Vue 脚手架 npm i -g @vue/cli // 3. 安装前端依赖 npm i // 4. 启动前端项目 npm run dev // 后端(Idea) // 1. 导入项目 // 2. 配置 Maven、开启redis(否则系统无法启动) // 3. 导入数据库,建议 MySQL8,若 5.7 版本需设置编码为 UTF-8,否则会提示密码错误 // 4. 等待后端依赖下载,完成后启动项目,或编译后执行 mvn spring-boot:run 软件架构分析 基于 Vue 和 SpringBoot 的通用管理系统包括了**登陆注册、用户管理、部门管理、文件管理、权限管理、日志管理、个人中心、数据字典和代码生成**这九大功能模块,其架构如下图所示。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值