瑞吉外卖(14) - 上传文件功能开发

news/2024/5/17 12:11:57/文章来源:https://blog.csdn.net/qq_39123467/article/details/127003800

文章目录

  • 文件上传介绍
  • 文件上传代码实现
    • 查看效果
    • 新建CommonController类
      • 断点测试
      • 转存文件
      • 取消拦截器过滤LoginCheckFilter.java
      • 运行测试
    • 完善功能
      • 编写application.xml
      • 编写CommonController.java
      • 运行测试
    • 完善二级目录
      • 编写application.yml
      • 编写CommonControler.java
      • 测试成功

文件上传介绍

请添加图片描述

请添加图片描述

请添加图片描述

文件上传代码实现

请添加图片描述

page>demo>复制upload.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>文件上传</title><!-- 引入样式 --><link rel="stylesheet" href="../../plugins/element-ui/index.css" /><link rel="stylesheet" href="../../styles/common.css" /><link rel="stylesheet" href="../../styles/page.css" />
</head>
<body><div class="addBrand-container" id="food-add-app"><div class="container"><el-upload class="avatar-uploader"action="/common/upload":show-file-list="false":on-success="handleAvatarSuccess":before-upload="beforeUpload"ref="upload"><img v-if="imageUrl" :src="imageUrl" class="avatar"></img><i v-else class="el-icon-plus avatar-uploader-icon"></i></el-upload></div></div><!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="../../plugins/vue/vue.js"></script><!-- 引入组件库 --><script src="../../plugins/element-ui/index.js"></script><!-- 引入axios --><script src="../../plugins/axios/axios.min.js"></script><script src="../../js/index.js"></script><script>new Vue({el: '#food-add-app',data() {return {imageUrl: ''}},methods: {handleAvatarSuccess (response, file, fileList) {this.imageUrl = `/common/download?name=${response.data}`},beforeUpload (file) {if(file){const suffix = file.name.split('.')[1]const size = file.size / 1024 / 1024 < 2if(['png','jpeg','jpg'].indexOf(suffix) < 0){this.$message.error('上传图片只支持 png、jpeg、jpg 格式!')this.$refs.upload.clearFiles()return false}if(!size){this.$message.error('上传文件大小不能超过 2MB!')return false}return file}}}})</script>
</body>
</html>

查看效果

请添加图片描述

请添加图片描述

当我们选择一张图片的时候,他会自动的发送请求到服务端,所以下面编写服务端,来处理这个请求

新建CommonController类

主要进行文件的上传和下载

package com.taotao.reggie.controller;import com.taotao.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import lombok.extern.slf4j.XSlf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;/*** create by 刘鸿涛* 2022/9/22 19:28*/
@SuppressWarnings({"all"})
/*** 文件上传和下载*/
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {/*** 文件上传* @param file* @return*/@PostMapping("/upload")public R<String> upload(MultipartFile file){return null;}
}

注意,此file参数必须要与payload中name = 'file’一致

请添加图片描述

断点测试

可以看到,这个文件目前是个临时文件状态,所以我们给他转存一下,否则本次请求完成后,这个临时文件会消失

请添加图片描述

尝试寻找临时文件

请添加图片描述

上传文件时传输的临时文件,被存放在c盘的temp内的更深的文件夹中

这个temp文件夹是我清理c盘时必清的文件夹,他就是系统缓存文件夹

这就是我们上传和下载文件的一个过程吧,他需要那么一个tmp类型文件来进行交互,当我们得到源文件时,这个tmp文件才会消失

请添加图片描述

转存文件

file.transferTo(new File(“D:\dishs”));

package com.taotao.reggie.controller;import com.taotao.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;/*** create by 刘鸿涛* 2022/9/22 19:28*/
@SuppressWarnings({"all"})
/*** 文件上传和下载*/
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {/*** 文件上传* @param file* @return*/@PostMapping("/upload")public R<String> upload(MultipartFile file){log.info(file.toString());try {//将临时文件转存到指定位置file.transferTo(new File("D:\\dishs.jpg"));} catch (IOException e) {System.out.println("转存文件失败...");e.printStackTrace();}return null;}
}

取消拦截器过滤LoginCheckFilter.java

添加common/**,使common文件夹下资源不用登陆也可以使用

请添加图片描述

运行测试

转存成功

请添加图片描述

完善功能

配置准确路径

编写application.xml

请添加图片描述

编写CommonController.java

请添加图片描述

请添加图片描述

运行测试

成功

请添加图片描述

完善二级目录

编写application.yml

在这里插入图片描述

编写CommonControler.java

package com.taotao.reggie.controller;import com.taotao.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;import java.io.IOException;
import java.util.UUID;/*** create by 刘鸿涛* 2022/9/22 19:28*/
@SuppressWarnings({"all"})
/*** 文件上传和下载*/
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {//类似于el表达式@Value("${reggie.path}")private String basePath;/*** 文件上传* @param file* @return*/@PostMapping("/upload")public R<String> upload(MultipartFile file){//file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除log.info(file.toString());//原始文件名String originalFilename = file.getOriginalFilename();   //adb.jpgString suffix = originalFilename.substring(originalFilename.lastIndexOf("."));//使用UUID重新生成文件名,防止文件名称重复造成文件覆盖String fileName = UUID.randomUUID().toString() + suffix;//创建一个目录对象File dir = new File(basePath);//判断当前目录是否存在if(!dir.exists()){//目录不存在,需要创建dir.mkdir();}try {//将临时文件转存到指定位置file.transferTo(new File(basePath + fileName));} catch (IOException e) {System.out.println("转存文件失败...");e.printStackTrace();}return R.success(fileName);}
}

测试成功

在这里插入图片描述

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

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

相关文章

使用streamstring实现格式化输入

目的&#xff1a;在windows系统写c项目&#xff0c;常用sscanf_s进行格式化输入。但是在ubuntu系统上发现sscanf_s不可用&#xff08;只有sscanf可用&#xff0c;但是它是c 99 的函数了&#xff09;。后面查阅知道&#xff0c;这个sscanf_s函数是微软专有的函数&#xff0c;不具…

linux 竞态与并发编程

前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内容。 提示&#xff1a;以下是本篇文…

Mapper代理开发

Mapper代理开发一. Mapper代理开发概述二. 使用Mapper代理要求(重点中的重点)三. 实操的代码main目录下的java目录中1. UserMapper接口2. User类3. MybatisDemo类main目录下的resources目录中1. UserMapper.xml2. logback.xml3. mybatis.xml一. Mapper代理开发概述 之前我们写的…

【SpringBoot2】02-SpringBoot中如何修改依赖的版本

Spring Boot 中修改依赖版本 如果默认版本号不合适&#xff0c;我们可以修改版本号。 首先&#xff0c;打开当前项目的 pom.xml 文件&#xff0c;查看 spring-boot-dependencies-2.7.4.pom 中规定当前依赖的版本。 例如&#xff0c;我想修改 MySQL 驱动版本&#xff0c;我先看…

OPSS-PEG-Acrylate,OPSS-PEG-AC,巯基吡啶-聚乙二醇-丙烯酸酯试剂供应

英文&#xff1a;OPSS-PEG-Acrylate&#xff0c;OPSS-PEG-AC 中文&#xff1a;巯基吡啶-聚乙二醇-丙烯酸酯 2、 CAS number&#xff1b; N/A 3、The category&#xff1b;Acrylate/Acrylamide PEG Orthopyridyl disulfide (OPSS) PEG 4、Molecular weight&#xff1a;巯基吡…

队列(C语言)

文章目录前言概念基本操作循环队列少用一个元素空间栈队列前言 本篇进行队列的学习。使用C语言实现 概念 排队是体现了“先来先服务”的原则。 在多道程序运行的计算机系统中&#xff0c;可以同时有多个作业运行&#xff0c;他们的运算结果都需要通过通道输出&#xff0c;若通…

[架构之路-3]:软件架构师也是魔法师,架构师应具备的四大方面的技能

目录 前言&#xff1a; 一、业务能力&#xff08;业务领域&#xff09;-- 面向业务 1.1 业务场景 1.2 业务技能 二、沟通能力&#xff08;管理领域&#xff09; -- 面向“人” 三、技术能力&#xff08;计算机领域&#xff09; -- 面向计算机 3.1 硬件技能 3.2 软件技能…

一个有点意思的网站 - 语雀

在这个平台上面创建了一个文档&#xff1a;CWIKIUS 语雀 Confluence Confluence 的问题就是太臃肿&#xff0c;不兼容 MD 格式。 但是&#xff0c;Confluence 和 JIRA 重度集成&#xff0c;因此成为很多公司文档的标配。 语雀 试用了下这个文档工具&#xff0c;整体上来说…

我们如何一键将录音转换成文字?

最近有很多小伙伴向我求助说&#xff0c;他的职业是一名记者&#xff0c;因为每次采访都要进行对话录音&#xff0c;可是每次结束后都需要再去对录音进行整理&#xff0c;花费了大量的时间。因此他总是在加班&#xff0c;他想改变这一现状却不知道该怎么办。其实我们不必如此麻…

platform.pk8 和platform.x509.pem转jks

/** OpenSSL */ 下载地址&#xff1a;http://slproweb.com/products/Win32OpenSSL.html 环境配置&#xff1a; openssl 安装后查看是否安装成功&#xff0c;需要以管理员身份运行cmd查看 cmd输入openssl出现下面显示&#xff0c;表示配置成功&#xff0c;openssl可以使用 pla…

VUE v-bind 数据绑定

动态的绑定一个或多个 attribute,也可以是组件的 prop。缩写: : 或者 . (当使用 .prop 修饰符) 期望: any (带参数) | Object (不带参数) 参数: attrOrProp (可选的) 修饰符:.camel ——将短横线命名的 attribute 转变为驼峰式命名。 .prop ——强制绑定为 DOM property。…

kafka 安装

目录 Docker安装 1.安装Docker 2.搜索docker镜像 3.安装Zookeeper 4. 安装kafka 5.启动kafka ​​​​​​​ Linux安装 1.kafka下载 2.安装JDK 3.安装zookeeper 4.安装kafka 5.启动kafka zookeeper上查看kafka的节点 1.进入zookeeper容器 2.运行客户端 3.查看ka…

MongoDB --- 聚合查询

什么是聚合查询 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce(在5.x已经弃用)。 单一作用聚合 提供了对常见聚合过程的简单访问,操作都从单个集合聚合文…

网络笔记大全(超详细)

目录 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 封装和解封装 应用层 传输层 网络层 数据链路层 物理层 PDU --- 协议数据单元应用层 --- 报文 传输层 --- 段 网络层 --- 包 数据链路层 --- 帧 物理层 --- 比特流 Sof --- 帧首…

日本25年来首次干预以支撑日元汇率

日本周四自 1998 年以来首次干预外汇市场&#xff0c;以支撑暴跌的日元&#xff0c;此前日本央行决定维持超低利率&#xff0c;这一决定已对日元造成冲击。 KlipC 风险经理 Philip Nucci 周五表示&#xff1a;“他们&#xff08;在外汇市场&#xff09;采取了果断行动&#xff…

pytorch神经网络入门(三)

一、建立简单的卷积神经网络 import torch from torch import nnclass ConvNet(nn.Module):def __init__(self):super(ConvNet, self).__init__()self.conv1 nn.Sequential(nn.Conv2d(1, 16, 3, 1, 1),nn.ReLU(),nn.AvgPool2d(2, 2))self.conv2 nn.Sequential(nn.Conv2d(16,…

Vue学习第29天——路由的props配置项的详解与案例(对比组件props配置项)

目录一、组件的props配置项1、作用2、理解3、用法二、路由的props配置项1、作用2、理解3、用法① props值为对象② props值为布尔值③ props值为函数4、接收参数三、props配置项搭配params传参案例练习四、props配置项搭配query传参案例练习五、总结在学习路由的props配置项之前…

python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(中)未完待续...

目录一、前言二、轨迹的跟随控制策略&#xff08;1&#xff09;利用模型预测控制&#xff08;MPC&#xff09;的思想控制&#xff08;2&#xff09; 仿真验证一、前言 本篇我们依然试着用一些浅显的数学知识&#xff0c;来研究和实现一下常用机器人小车&#xff08;如AGV&…

异常值检测!最佳统计方法实践(代码实现)!

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; Python3◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/56 &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https://ww…

Mysql数据库高阶语句

目录 一&#xff0c;正则表达式 1&#xff0c;以“.”代替任意一个字符 2&#xff0c;匹配前面字符多次 3&#xff0c;匹配前面字符至少一次 4,匹配字符串 5&#xff0c;匹配包含或者关系的记录 6&#xff0c;匹配指定字符集中的任意一个 二&#xff0c;运算符 1、算数运算 2…