Html标签,file方式,上传文件
恩,如果不记下来,记忆就会模糊掉。
希望自己下次看见这篇博客的时候,会解决掉疑问
--------------------------------------------------------------------
<form method="post" enctype="multipart/form-data" action="Upload.ashx" >
<input type="file" name="fileName" />
<input type="submit" name="上传" />
</form>
enctype属性设置为multipart/form-data,浏览器会把上传的文件名和文件数据放在结构体内,传给Action中指向的文件中。
1.第一步,我们要首先获取到,传过来的结构体内的文件数据。
HttpPostedFile file=context.Request.Files[0];
因为这里我们设置只有一个file,只会传一个文件。所以后面index中的值直接给0。
2.验证用户点击上传表单之后,file中是否为空
if (file.ContentLength > 0)
这里用的验证是ContentLength 获得传递Http传递的实体长度,file为空,则返回false
3.获得用户上传文件的,文件名及拓展名。
//Path.GetFileName(path)以获得文件名
//Path.GetExtension(path)获得文件拓展名
string oldfileName = Path.GetFileName(file.FileName); //获得文件名+拓展名
string fileExt = Path.GetExtension(oldfileName); //获得拓展名
4.判断用户上传的文件,是否为图片。验证后缀名
...省略
5.用Guid重写用户上传的文件名
//使用Guid时,只需Guid.NewGuid()
string newFileName = Guid.NewGuid().ToString();
6.新建目录,并判断站点中是否含有此路径,如没有则新建
//Dicectory.Exists(Path)此方法用来确定,磁盘上是否具有相同路径,返回Bool
//Directory.CreateDirectory(Path) 此方法用来生成目录和子目录。
string dir = "/UpLoad/" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day;
if (!Directory.Exists(context.Request.MapPath(dir)))
{
Directory.CreateDirectory(context.Request.MapPath(dir));
}
7.拼凑文件名-带路径。
string fullFileName = dir + newFileName + fileExt;
8.上传文件
//SavsAs(完整文件名) 上传文件。
file.SaveAs(context.Request.MapPath(fullFileName));
9.输出
..略
------------------------------------------------------------------------------------------------------------------------------
留给自己的问题。
1.上传一个文件,那么在浏览器内部发生了什么?Http协议怎么传输?
2.为什么enctype写在action后不生效?
3.此过程发生在哪个阶段?
Html标签,file方式,上传文件的更多相关文章
- Ajax方式上传文件
用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 For ...
- 通过Ajax方式上传文件,使用FormData进行Ajax请求
通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...
- Android必知必会-使用okhttp的PUT方式上传文件
注:如果移动端排版有问题,请看 简书版 (<-点击左边),希望CSDN能更好的支持移动端. 背景 公司的文件上传接口使用PUT协议,之前一直用的都是老项目中的上传类,现在项目中使用了okhttp ...
- koa2:通过Ajax方式上传文件,使用FormData进行Ajax请求
koa2通过表单上传的网上很多,但通过Ajax方式上传文件,使用FormData进行Ajax请求,不好找. 参考了这个用base64上传图片的例子.https://github.com/Yuki-Mi ...
- 前端 - jquery方式 / iframe +form 方式 上传文件
环境与上一章一样 jquery 方式上传文件: HTML代码 {#html代码开始#} <input type="file" id="img" > ...
- [转] 通过Ajax方式上传文件,使用FormData进行Ajax请求
通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...
- php 下 html5 XHR2 + FormData + File API 上传文件
FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...
- egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名
egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...
- 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求
<script type="text/jscript"> $(function () { $("#btn_uploadimg").click(fun ...
- web 表单方式上传文件方法(不用flash插件)
原理:使用表单的input type="file"标签,通过ajax提交表单请求,后台获取请求中的文件信息,进行文件保存操作 由于我测试用的做了一个上传文件和上传图片方法,所以我有 ...
随机推荐
- POPTEST老李分享DOM解析XML之java
POPTEST老李分享DOM解析XML之java Java提供了两种XML解析器:树型解释器DOM(Document Object Model,文档对象模型),和流机制解析器SAX(Simple ...
- mysql 主从同步 实现增量备份
数据库复制 replication 的实现原理 1:主服务器凡运行语句,都产生一个二进制日志 binlog 2:从服务器不断读取主服务器的binlog 3:从主服务读取到的binlog,转换为自身可执 ...
- Intellij IDEA2016 注册码
网上大多数关于Intellij IDEA2016的注册码多是同一个,如下 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1l ...
- 1001. Exponentiation高精度运算总结
解题思路 这道题属于高精度乘法运算,要求输入一个实数R一个指数N,求实数R的N次方,由于R有5个数位,而N又特别大,因此用C++自带的数据类型放不下. 解题思路是通过数组储存每次乘积结果和底数的每一位 ...
- 【模板】Dijkstra的heap优化
为了将最小费用最大流的spfa优化,决定将spfa换成heap优化的Dijkstra.(dijkstra不能处理负边权) 所以还得现学... 白点表示已经确定最短路径的点. 蓝点表示还未确定最短路径的 ...
- Java多线程学习笔记(二)——Executor,Executors,ExecutorService比较
Executor:是Java线程池的超级接口:提供一个execute(Runnable command)方法;我们一般用它的继承接口ExecutorService. Executors:是java.u ...
- stm32通过电调带动电机(可按键调速)
这几天在做32通过电调带动电机的实验,上网一查,发现这方面的资料很少,经过自己的亲自实践,总结出以下经验,供大家参考. 论坛上也有很多人说自己在做,但是都遇到了同样的瓶颈.我想他们大多是pwm的频率和 ...
- 初遇stm32
刚开始接触32,建一个工程都这么费劲,可能是keil安装时一些文件和库没有安装完整,真是坑啊. 回头可能还要从新安装,然后开始新的学习,争取十天之内入门32,在博客园这个强大的技术支持下, 想不入门都 ...
- 使用Asp.Net MVC开发兼职文章系统
我已经开发好了,你拿去用就是了. 以下是README的内容,包含功能要求和开发过程的一些思考: 一.功能 1.学生兼职人员文章(任务.自由编写),审核(通过,退回修改,无效),并按每15天结算一次费用 ...
- NGINX中的proxy_pass和rewrite
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6807081.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点,如 ...