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提交表单请求,后台获取请求中的文件信息,进行文件保存操作 由于我测试用的做了一个上传文件和上传图片方法,所以我有 ...
随机推荐
- 【Java基础 】Java7 NIO Files,Path 操作文件
从Java1.0到1.3,我们在开发需要I/O支持的应用时,要面临以下问题: 没有数据缓冲区或通道的概念,开发人员要编程处理很多底层细节 I/O操作会被阻塞,扩展能力有限 所支持的字符集编码有限,需要 ...
- CentOS下查看nginx和php的编译参数
在已经编译安装好的nginx和php的server上是可以查看之前编译时候的参数的,方法如下. 1.查看nginx的编译参数 # nginx -V nginx version: nginx/1.9.4 ...
- 【Flex】去除外边框,底背景透明,改变exe的icon
一.去除程序外边框 1.在 xx-app.xml文件里,找到 <!-- <systemChrome></systemChrome> --> 这句话,然后删掉注释 ...
- 程序员的基本功之Java集合的实现细节
1.Set集合与Map 仔细对比观察上面Set下和Map下的接口名,不难发现它们如此的相似,必有原因 如果只考察Map的Key会发现,它们不可以重复,没有顺序,也就是说把Map的所有的Key集中起来就 ...
- poptest老李谈分布式与集群 1
poptest老李谈分布式与集群 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...
- Java并发编程:volatile 关键字
转自:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 其实Java语言是支持多线程的,为了解决线程并发的问题,在语言内部 ...
- WebService基础学习(一)—基础知识
一.WebService 1.什么是WebService Web Service(WEB服务)能够快捷和方便地综合结合各种系统.商务和任何应用平台.利用最新的Web Service 标准能够 ...
- 前端借助dom-to-image把HTML转成图片并通过ajax上传到服务器
之前接到了一个任务,把jsp中的table转成一个图片,保存在指定文件夹并显示在前端. 我的思路是:一.引用第三方js在前端把table转成图片 二.通过ajax把图片上传到服务器,保存在指定文件夹 ...
- Google Chrome 默认非安全端口列表
1, // tcpmux7, // echo 9, // discard 11, // systat 13, // daytime 15, // netstat 17, // qotd 19, // ...
- Python-一些实用的函数
一,返回值为bool类型的函数 1.any()函数 any(iterable)->bool 当迭代器中有一个是Ture,则返回Ture:若interable=NUll,则返回False. > ...