文件上传ajax

article/2025/9/6 2:16:48

因为文章内容和文章标题,文章图片不方便在同一个form中,所以这里通过ajax传输数据

文件上传

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L83reSBX-1651889689578)(C:\Users\故事很长\AppData\Roaming\Typora\typora-user-images\image-20220507095758779.png)]

html,这里使用的bootstrap

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h5 class="modal-title" id="myModalLabel">发布文章</h5></div><div class="modal-body container"><div class="row"><form><div class="row"><div class="col-xs-1"><label>文章标题</label></div><div class="col-xs-2"><input type="text" name="title" id="title1"></div></div><br><div class="row"><div class="col-xs-1"><label>文章分类</label></div><div class="col-xs-4"><select class="col-xs-4" style="width: 120px" id="select" name="category"><option>请选择博客分类</option><option th:each="category:${categoryList}" th:text="${category.categoryname}">vue</option></select></div></div><div class="row"><div class="col-xs-1"><label  style="margin-top: 10px">文章标签</label></div><div class="col-xs-4"><div><div class="checkbox" style="margin-right: 8px"><label><input type="checkbox" name="tag" value="spring">spring</label></div></div><div><div class="checkbox"><label><input type="checkbox"  name="tag" value="springboot">springboot</label></div></div></div><div class="row"><div class="col-xs-1"><label>文章首图</label></div><div class="col-xs-1"><input type="file" id="inputFile" name="file"></div></div><div class="row"><div class="col-xs-4"></div><div class="col-xs-2"><input type="button" onclick="addArticle()" class="btn btn-primary" value="发布文章"></div></div></form></div></div></div><!-- /.modal-content --></div><!-- /.modal -->
</div>

ajax 传输

    function addArticle() {var formdata = new FormData();formdata.append("file",$("#inputFile")[0].files[0])var category = $('#select').find("option:selected").text();var content = $("#content").text() //这里不能使用val()函数获取值,否则后端会报错,具体什么原因不太清楚var title = document.getElementById("title1").value//追加数据进formdata 键值对formdata.append("category",category);// formdata.append("tags",chk());  复选框未使用formdata.append("content",content);formdata.append("title",title);$.ajax({type:"post",url: '/article/test',data: formdata,contentType : false,processData : false,success : function(data) {if (data!=""){window.location.href="/article/articleList"}},error : function(){}})}

后端

//封装成实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Upload {private String title;private String content;
//    private String tags;private String category;private MultipartFile file;
}

控制层

@Transactional@ResponseBody@RequestMapping("/test")public String test(Upload upload,Map map){//存储tagid//List<Integer> tagidList = new ArrayList<> ();//根据分类名获取分类idint categoryid = categoryService.findCategoryByName(upload.getCategory()).getId();MultipartFile file = upload.getFile();if(!file.isEmpty()){//图片的保存路径String uploadPath =System.getProperty("user.dir") + "/src/main/resources/templates/img";// 如果目录不存在则创建File uploadDir = new File(uploadPath);if (!uploadDir.exists()) {uploadDir.mkdir();}//获取原文件名String OriginalFilename = file.getOriginalFilename();//获取文件后缀名String suffixName = OriginalFilename.substring(OriginalFilename.lastIndexOf("."));//重新随机生成名字String filename = UUID.randomUUID().toString() +suffixName;File localFile = new File(uploadPath+"\\"+filename);try {//把上传的文件保存至本地file.transferTo(localFile);//操作数据库map.put("createdate",DateUtil.jtod(new Date()));map.put("adminid",redisUtils.hmget("user").get("userid"));map.put("content",upload.getContent());map.put("title",upload.getTitle());map.put("img","img/"+filename);int res = articleService.insert(map);int articleid = 0 ;if (res>0){articleid =  articleService.findArticleByTitle(upload.getTitle()).getId();}categoryService.artInsert(articleid,categoryid);//上传成功,返回保存的文件地址return filename;}catch (IOException e){e.printStackTrace();System.out.println("上传失败");return "error";}}else{System.out.println("文件为空");return "empty";}}

测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据库数据
在这里插入图片描述


http://chatgpt.dhexx.cn/article/gD0whWpO.shtml

相关文章

ajax以及文件上传的几种方式

AJAX准备知识&#xff1a;JSON 什么是 JSON &#xff1f; JSON 指的是 JavaScript 对象表示法&#xff08;JavaScript Object Notation&#xff09;JSON 是轻量级的文本数据交换格式JSON 独立于语言 *JSON 具有自我描述性&#xff0c;更易理解 * JSON 使用 JavaScript 语法来描…

ajax怎么上传文件?注意事项

ajax&#xff0c;即异步处理&#xff0c;相信程序员朋友们都会感觉到亲切吧&#xff0c;因为ajax在软件开发过程中实在是太常用了&#xff0c;还是有不少刚刚入门想学习软件开发的朋友可能不是很熟悉如何使用ajax&#xff0c;今天就一起来看看吧&#xff0c;怎样使用ajax上传文…

上传文件—ajax

目录 一、上传图片文件 1.写基本html 完成页面主框架 2.script部分 2-0 主框架 上传文件按钮被点击触发事件 2-1验证使得否选择文件 2-2 介绍 FormData 2-3 监听onreadystatechange事件 小结 二、实现上传文件进度条 1. 在bootstrap找进度条组件 2.script 完成进度条算法…

使用AJAX实现上传文件

前端代码 <form id"uploadForm" method"post" enctype"multipart/form-data"><label >上传电子书</label><input type"file" name"file" ><button id"upload" type"butto…

计算多边形面积

对于规则多边形&#xff0c;矩形、梯形、平行四边形、三角形&#xff08;根据三边长度&#xff0c;利用公式计算&#xff09;&#xff0c;可以通过公式计算其面积&#xff0c;而对于一般意义的多边形&#xff08;单一多边形、不包含“洞”&#xff09;&#xff0c;怎么计算面积…

C# 多边形面积计算公式

最近在做地图相关面积计算显示工作&#xff0c;百度了很多关于多边形面积计算方面公式和代码&#xff0c;只能说贼费劲&#xff0c;最终完成了把结果展示下 原理&#xff1a;鞋带公式 定义&#xff1a;所述鞋带式或鞋带算法&#xff08;也称为高斯的面积公式和测量员的式&#…

【计算多边形面积】

题目 Input 输入数据包含多个测试实例&#xff0c;每个测试实例占一行&#xff0c;每行的开始是一个整数n(3<n<100)&#xff0c;它表示多边形的边数&#xff08;当然也是顶点数&#xff09;&#xff0c;然后是按照逆时针顺序给出的n个顶点的坐标&#xff08;x1, y1, x2,…

hdu 2036(多边形面积公式)

改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 33251 Accepted Submission(s): 17118 Problem Descripti 话说部分学生心态极好&#xff0c;每天就知道游戏&#xff0c;这次考试如此简单的题目…

鞋带公式——多边形面积求和

个人博客&#xff1a;The Blog Of WaiterXiaoYY 欢迎来互相交流学习。 啥是鞋带公式&#xff08;shoelace&#xff09; Shoelace公式&#xff0c;也叫高斯面积公式&#xff0c;是一种数学算法&#xff0c;可求确定区域的一个简单多边形的面积。 该多边形是由它们顶点描述笛卡…

皮克定理和任意多边形的面积公式

1. 叉乘&#xff1a; 若 &#xff1a; &#xff0c;&#xff0c;则&#xff1a; 而&#xff1a; 则&#xff1a; 为三角形面积&#xff0c;建议百度叉乘的几何意义 2. 皮克公式&#xff1a; 即&#xff1a;多边形面积 S 多边形内整数点的个数 n 多边形边上整数点的个数…

计算任意多边形的面积(已知各顶点的坐标)

https://blog.csdn.net/Adusts/article/details/80546770 如何计算一个多边形的面积&#xff0c;首先想到的是划分成多个小的三角形&#xff0c;因为三角形我们比较熟悉&#xff0c;而且三角形计算面积的方法也很多 三角形: 1. 半周长 P(abc)/2 2. 面积 SaHa/2absin(C)/2sqrt(…

python中的scapy模块

文章目录 模块简介基本用法Scapy的基本操作Scapy模块中的函数Scapy模块的常用简单实例编写端口扫描器 模块简介 Scapy是一个由Python编写的强大工具&#xff0c;目前很多优秀的网络扫描攻击工具都使用了这个模块。也可以在自己的程序中使用这个模块来实现对网络数据包的发送、…

Scapy使用文档中文版

0x00 前言 scapy是一个强大的交互式(interactive)的包操作程序&#xff0c;用python写的&#xff0c;有一个python的命令行解释器界面&#xff0c;可直接运行&#xff0c;当然也可以作为第三库&#xff0c;导入到我们的python程序中去使用它的类和方法。 关于scapy作者的一个简…

“人生苦短,我用Python“——Socket、Nmap、Scapy

渗透测试模块 Socket实例化Socket类Socket常用的函数服务端函数客户端函数服务端和客户端均可使用的函数使用Socket编写一个简单的服务端和客户端 Nmappython-nmap模块类的实例化python-namp模块中的函数PortScanner类PortScannerAsync类使用python-nmap模块来编写一个扫描器 S…

【Python】scapy模块学习笔记

文章目录 0x00 scapy安装以及环境配置0x01 实验10x02 实验20x03 实验30x04 实验40x04 实验50x06 python代码实现端口扫描 0x00 scapy安装以及环境配置 学习自知乎大佬 ——弈心——网络工程师的Python之路—Scapy基础篇 复现了一波 scapy安装: pip install scapy导入scapy方…

Python-Scapy使用介绍

介绍 Scapy可作为python模块运行,也可以单独运行,scapy在kali自带,可以直接输入scapy进入交互命令行。 Scapy可对网络数据包进行发送、监听、解析等操作,类似于python-nmap模块,只不过scapy更偏向于底层操作。 函数 下面简单了解下scapy的基本使用,这里以kali系统为例…

python的scapy基础使用

Scapy库 解决三个问题&#xff1a; 监听流量&#xff08;与wireshark相同&#xff09; 分析流量 编辑流量数据包&#xff08;链路层 网络层 传输层&#xff09;&#xff0c;应用层也可以编辑 意义不大 提供两种操作方式 基于命令进行交互 python代码调用 基于命令进行交…

Python使用scapy和dpkt抓包并解析

scapy scapy是python中一个可用于网络嗅探的非常强大的第三方库&#xff0c;可以用它来做 packet 嗅探和伪造 packet。 scapy已经在内部实现了大量的网络协议。如DNS、ARP、IP、TCP、UDP等等&#xff0c;可以用它来编写非常灵活实用的工具。 scapy安装&#xff1a; pip inst…

Scapy:交互式数据包处理程序

简介 Scapy是一个强大的&#xff0c;用Python编写的交互式数据包处理程序 可以让用户发送、嗅探、分析和伪造网络包&#xff0c;从而用来侦测、扫描和向网络发动攻击 可以轻松地处理扫描(scanning)、路由跟踪(tracerouting)、探测(probing)、单元测试(unit tests)、攻击(attac…