恩,如果不记下来,记忆就会模糊掉。

希望自己下次看见这篇博客的时候,会解决掉疑问

--------------------------------------------------------------------


<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方式,上传文件的更多相关文章

  1. Ajax方式上传文件

    用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 For ...

  2. 通过Ajax方式上传文件,使用FormData进行Ajax请求

    通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...

  3. Android必知必会-使用okhttp的PUT方式上传文件

    注:如果移动端排版有问题,请看 简书版 (<-点击左边),希望CSDN能更好的支持移动端. 背景 公司的文件上传接口使用PUT协议,之前一直用的都是老项目中的上传类,现在项目中使用了okhttp ...

  4. koa2:通过Ajax方式上传文件,使用FormData进行Ajax请求

    koa2通过表单上传的网上很多,但通过Ajax方式上传文件,使用FormData进行Ajax请求,不好找. 参考了这个用base64上传图片的例子.https://github.com/Yuki-Mi ...

  5. 前端 - jquery方式 / iframe +form 方式 上传文件

    环境与上一章一样 jquery 方式上传文件: HTML代码 {#html代码开始#} <input type="file" id="img" > ...

  6. [转] 通过Ajax方式上传文件,使用FormData进行Ajax请求

    通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...

  7. php 下 html5 XHR2 + FormData + File API 上传文件

    FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...

  8. egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名

    egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...

  9. 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求

    <script type="text/jscript"> $(function () { $("#btn_uploadimg").click(fun ...

  10. web 表单方式上传文件方法(不用flash插件)

    原理:使用表单的input type="file"标签,通过ajax提交表单请求,后台获取请求中的文件信息,进行文件保存操作 由于我测试用的做了一个上传文件和上传图片方法,所以我有 ...

随机推荐

  1. vuejs2.0子组件改变父组件的数据

    在vue2.0之后的版本中,不允许子组件直接改变父组件的数据,在1.0的版本中可以这样操作的,但是往往项目需求需要改变父组件的数据,2.0也是可一个,区别是,当我们把父元素的数据给子组件时,需要传一个 ...

  2. 自动化利器-Zabbix

    1.1为何需要监控系统 在一个IT环境中会存在各种各样的设备,例如:硬件设备.软件设备.其系统的构成也是非常复杂的. 多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责. ...

  3. AngularJS1.X学习笔记5-加强版的表单

    大家愚人节快乐!表单是沟通服务器端和客户端的桥梁,为数据从客户端传到服务端打开了一扇大门.AngularJS增加了一些新特性,使我们能够更加方便的操作表单.OK!开始学习!学习使我快乐. 一.双向数据 ...

  4. css实现超出部分用...代替

    如果是一行的话 css为 white-space: nowrap: 保证文本内容不会自动换行,如果多余的内容会在水平方向撑破单元格. overflow: hidden: 隐藏超出单元格的部分. tex ...

  5. WPF 截屏软件开发

    最近由于工程需要开始研发基于Windows的自动录屏软件,很多细节很多功能需要处理,毕竟一个完美的录屏软件不是你随随便便就可以写出来的.首先参考了大部分的录屏软件,在研发的过程中遇到了很多的问题:比如 ...

  6. 刷机无法连接4g

    只显示2g,gsm only 无法修改,本人刷cm13和lineageOs都遇到过这样的情况,可能与手机有关xt1570(moto x style),特在此分享,希望有用 1.首先在设置中将sim卡网 ...

  7. .Net 官方学习文档

    .Net 官方学习文档:https://docs.microsoft.com/zh-cn/dotnet/articles/welcome

  8. js原型对象

    原型对象是什么? 在js中,每一个创建的的函数都会有一个prototype属性,这个属性指向一个对象,这个对象就是原型对象 function lla(){} console.log(lla.proto ...

  9. HTTP协议介绍

    一.什么是HTTP协议呢? 维基百科 写道 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议.HTTP是一个客户端终端 ...

  10. 手机QQ无法临时会话的解决方案

    手机网页发起临时会话:    <a href="mqqwpa://im/chat?chat_type=wpa&uin=3355135984&version=1& ...