通过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对象
随机推荐
- Docker+Nginx+Tomcat实现负载均衡
环境检测: 1.Docker没有安装的小伙伴请查看https://www.cnblogs.com/niuniu0108/p/12372531.html 2.没有创建Nginx容器的小伙伴请查看http ...
- Blue Jeans[poj3080]题解
题目 Description - The Genographic Project is a research partnership between IBM and The National Geog ...
- ELK学习实验015:日志的自定义index配置
前面使用json格式收集了nginx的日志,但是再index的显示是filebeat-*,现在使用自定义的index进行配置 但是再使用filebeat的7.4版本以后,有一个巨坑,就是按照网络的很多 ...
- ubuntu安装pyenv
安装依赖包 bash {.line-numbers} sudo apt-get update sudo apt-get install build-essential python-dev pytho ...
- 1、微服务--为什么有consul,consul注册,心跳检测,服务发现
一.为什么有consul? 在微服务,每1个服务都是集群式的,订单服务在10台服务器上都有,那么用户的请求到达,获取哪台服务器的订单服务呢?如果10台中的有的订单服务挂了怎么办?10台服务器扛不住了, ...
- [转] c# 中使用opencv进行视频捕获
简介 这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的. 这将有助于那些喜欢C#和OpenCV环境的人.这个程序完全基于Visual Stud ...
- UVA12124 | Assemble (二分)
原题 题目大意:给出你的预算和各类待选硬件来组装计算,同种类的硬件只需且必须选购一种,在保证预算足够的情况下求出最优的合计硬件质量. 根据木桶原理,合计硬件质量 = 所选购硬件中数值最低质量的硬件质量 ...
- 如何在Windows上开启Ping或者禁止PING
方法1:命令行模式 进入服务器后 点击 开始——运行 输入命令: netsh firewall set icmpsetting 8 这样就可以在外部ping到服务器了 非常简单实用! 同样道理,如果想 ...
- 查看Sql Server库中某张表的结构
--快速查看表结构(比较全面的) SELECT CASE WHEN col.colorder = THEN obj.name ELSE '' END AS 表名, col.colorder AS 序号 ...
- 如何在macOS下安装geoserver
macOS 下的编译包 如果是使用安装文件,请查看官网文档,如果想要部署在已有的tomcat服务下,请查看网页压缩包章节. Web archive. An alternate way of insta ...