通过FormData对象可以组装一组用 [XMLHttpRequest]发送请求的键/值对,它可以更灵活方便的发送表单数据。
工作记录用
1 大概页面,点击选择按钮,选择文件,填写备注并可以上传前预览,然后点击上传按钮开始上传


2 html+js代码
<h2>Test</h2>
<div id="fileList"></div>
<span id="file_ct" style="display:none"><input id="file_input" accept="Image/*" type="file" multiple onchange="onFileChange()" /></span>
<a href="#" class="buttom btn-small" onclick="document.getElementById('file_input').click()">选择图片</a>
<a href="#" class="buttom btn-small" onclick="Upload()">上传</a> <script type="text/javascript">
var formData;
function onFileChange() {
formData = new FormData();//清空FormData中的数据
$("#fileList").html(''); // 清空列表 var Upload = document.getElementById("file_input");
var fileList = Upload.files;
for (let i = 0; i < fileList.length; i++) {
var file = fileList[i];
if ((file.size / 1024 / 1024) > 10) {
alert("图片超过10MB,超过限制大小。");
return;
}
$("#fileList").append("<tr><td>" + file.name + " 备注:<input type='text' name='Remark_After' /><img style='width:200px;height:200px;' id='Img_After_" + i + "' src='' alt='' /><input type='button' value='上传预览' onclick='preview1(" + i + ")'/></td></tr>");
formData.append("Image_After_" + i, file);
}
// 避免第二次点击无效
$("#file_input").remove();
$("#file_ct").append("<input id='file_input' accept='Image/*' type='file' multiple onchange='onFileChange()' />");
};
function preview1(i) {
let reader
if (formData.get("Image_After_" + i)) {
reader = new FileReader()
reader.readAsDataURL(formData.get("Image_After_" + i))
}
reader.onload = function (e) {
document.getElementById('Img_After_' + i).src = e.target.result
}
}
function Upload()
{
var request = new XMLHttpRequest();
request.open('post', '@Url.Content("~/Home/TestUpload")', true);
request.onload = function (e) {
console.log(e);
}
$("input[name='Remark_After']").each(function (index, e) {
formData.append("Remark_After_" + index, $(e).val());
}); request.send(formData); //发送请求
request.onreadystatechange = function () {
//若响应完成且请求成功
if (request.readyState === 4 && request.status === 200) {
alert('操作成功。');
}
}
}
</script>
3 C# 后台代码
public void TestUpload()
{
string basePath = HttpRuntime.BinDirectory;
if (!Directory.Exists(Url.Content($"{basePath}/UploadImage")))
{
Directory.CreateDirectory(Url.Content($"{basePath}/UploadImage"));
}
foreach (string fileName in Request.Files)
{
HttpPostedFileBase file = Request.Files[fileName];
// 生成唯一的文件名称,避免同名覆盖
file.SaveAs(Url.Content($"{basePath}/UploadImage/{Guid.NewGuid().ToString()}.{file.ContentType.Split('/')[1]}"));
}
}
完成 ,再见 th
formdata 是真的好用
通过FormData对象可以组装一组用 [XMLHttpRequest]发送请求的键/值对,它可以更灵活方便的发送表单数据。的更多相关文章
- 爬虫模拟登陆之formdata表单数据
首先HTTP协议是个无连接的协议,浏览器和服务器之间是以循环往复的请求回复来交互的,交互的形式是以文件形式来进行的.比如在chrome开发者工具network中看到了 每一行是一个文件,又文件大小啊, ...
- HTML5 借助http请求发送formdata对象,从而上传文件 XMLHttpRequest, FormData
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Ajax发送FormData对象封装的表单数据
前端页面: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...
- 怎样使用FormData对象加工表单数据
1. 获取表单(form)节点 2. 对FormData实例做相关操作 3. 发起HTTP请求 function sendForm(form) { var formData = new FormDat ...
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- Jquery如何序列化form表单数据为JSON对象
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- HTML5新技术FormData提交表单数据
免去了你每次都要document.getElement的方式去获取input的表单值 传统方式 新技术表单数据提交 FormData使用注意 .无需调用setRequestHeader()方法 .要求 ...
- request对象多种方法封装表单数据
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...
- 表单数据转javabean对象
随机推荐
- [PAT] A1019 General Palindromic Number
[题目] https://pintia.cn/problem-sets/994805342720868352/problems/994805487143337984 题目大意:给定一个N和b,求N在b ...
- css中content-box和border-box当宽度为百分比时的位置区别,vw和%区别
盒模型 参考代码 // CSS 部分 <style> .box1,.box2{ width: 200px; height: 200px; padding: 20px; margin: 20 ...
- Linux网络课程学习第一天
第一天上课主要介绍了LINUX系统和Linux课程的情况.了解了开源系统的四大优势,六大特点. 最具有心得的一句话: 学习是件苦差事: 稻盛和夫先生的话也深深激励着我:“工作马马虎虎,只想在兴趣和游戏 ...
- SpringBoot整合ActiveMQ开启持久化
1.开启队列持久化 只需要添加三行代码 jmsTemplate.setDeliveryMode(2); jmsTemplate.setExplicitQosEnabled(true); jmsTemp ...
- Time series data mining
from here 论文Timeseries data mining(2012)中提出:时间序列数据挖掘包括7个基本任务和3个基础问题: 7 tasks: query by content clust ...
- 关于eclipse 项目导入不了 maven依赖的解决办法
1.首先确定你的项目是maven 项目 ,如果不是:项目右键Configure -->Convert to maven project. 2.在SVN导出的Maven项目,或以前不是用Maven ...
- ZedGraph怎样在双击图形后添加箭头标记
场景 在ZedGraph的曲线图上,双击图时会在图形上生成箭头符号标记. 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的 ...
- POJ-3984-迷宫问题(bfs+记录路径)
定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...
- JDK 动态代理的实现
JDK 动态代理的实现 虽然在常用的 Java 框架(Spring.MyBaits 等)中,经常见到 JDK 动态代理的使用,也知道了怎么去写一个 JDK 动态代理的 Demo,但是并不清楚实现原理. ...
- java注释英语自动机翻
一.简介 每次面试都被怼spring源码你看过吗?你用spring开发源码你都不看的吗?这样怎么开发?那我就下点决心,趁着现在疫情在家宅,我要看spring源代码.但是发现注释都是英文,勉勉强强能看懂 ...