• 006-文件上传校验与直接下载


    -》说明:使用http协议只适合传输小文件,如果想传递大文件,则需要使用插件或者客户端程序(使用ftp协议)
    -》客户端操作
    《1》为表单添加属性:enctype="multipart/form-data"
    《2》在表单中添加控件:<input type="file" name="f1"/>
    《3》表单必须使用post提交方式
    -》服务器端操作
    《1》使用Request.Files属性获取文件对象
    《2》使用HttpPostedFile对象的SaveAs()方法保存
    -》观察一下数据报文
    当设置表单的enctype="multipart/form-data"属性后,不再是key-value格式,而是在请求体中使用分隔符划分
    -》限制:不允许上传可执行文件,只允许上传静态文件
    例:只允许上传图片
    客户端校验
    服务器端校验
    -》提高:将文件保存到对应年、月、日文件夹下,以方便遍历
    动态创建路径
    拼接路径信息

    文件上传校验

     1 <!DOCTYPE html>
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     5     <title></title>
     6     <script>
     7         window.onload = function() {
     8             document.getElementById('form1').onsubmit = function ()
     9             {
    10                 //var f1= document.getElementById('f1');
    11                 //var ext = f1.value.substring(f1.value.lastIndexOf('.'));
    12                 //if (ext == '.jpg') {
    13                 //    return true;
    14                 //} else {
    15                 //    alert('文件格式非法');
    16                 //    return false;
    17                 //}
    18             };
    19         };
    20     </script>
    21 </head>
    22 <body>
    23     <form method="POST" action="UploadTest.ashx" enctype="multipart/form-data" id="form1">
    24         <input type="text" name="fileName"/>
    25         <br/>
    26         <input type="file" name="f1" id="f1"/>
    27         <input type="submit" value="上传"/>
    28     </form>
    29 </body>
    30 </html>
     1         public void ProcessRequest(HttpContext context)
     2         {
     3             //文本格式text/html
     4             context.Response.ContentType = "text/html";
     5             //获取文件名
     6             string fileName = context.Request["fileName"];
     7             //根据键接收文件
     8             HttpPostedFile file1 = context.Request.Files["f1"];
     9             //获取文件扩展名(IE浏览器获取绝对全路径)
    10             string ext = Path.GetExtension(file1.FileName);
    11             if (ext != ".jpg")
    12             {
    13                 context.Response.Write("文件格式非法");
    14                 return;
    15             }
    16             //绝对路径
    17             string path = context.Request.MapPath("/Uploads/");
    18             //相对路径
    19             string path2 = "/uploads/";
    20             //向特定文件夹中进行保存
    21             DateTime now = DateTime.Now;
    22             path += now.Year + "/" + now.Month + "/" + now.Day + "/";
    23             path2 += now.Year + "/" + now.Month + "/" + now.Day + "/";
    24             //判断是否存在
    25             if (!Directory.Exists(path))
    26             {
    27                 //没有则创建
    28                 Directory.CreateDirectory(path);
    29             }
    30             //保存(路径+文件名+扩展名)
    31             file1.SaveAs(path+fileName+ext);
    32             //显示
    33             context.Response.Write("<img src='"+path2+fileName+ext+"'/>");
    34         }

    文件直接下载

     1 <!DOCTYPE html>
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     5     <title></title>
     6 </head>
     7 <body>
     8     <a href="Uploads/redgreen.rar">Uploads/redgreen.rar</a>
     9     <a href="Uploads/redgreen.swf">Uploads/redgreen.swf</a>
    10     <a href="Uploads/sg1.jpg">show girl</a>
    11     <hr/>
    12     <a href="/DownloadTest.ashx?f1=Uploads/redgreen.rar">Uploads/redgreen.rar</a>
    13     <a href="/DownloadTest.ashx?f1=Uploads/redgreen.swf">Uploads/redgreen.swf</a>
    14     <a href="/DownloadTest.ashx?f1=Uploads/sg1.jpg">show girl</a>
    15 </body>
    16 </html>
     1         public void ProcessRequest(HttpContext context)
     2         {
     3             string f1 = context.Request["f1"];
     4             //指定为下载操作
     5             context.Response.ContentType = "application/octet-stream";
     6             //附加头信息,表示保存文件时的文件名
     7             context.Response.AddHeader("Content-Disposition", "attachment; filename=""+f1+"";");
     8             //输出文件
     9             context.Response.WriteFile(context.Request.MapPath(f1));
    10         }
  • 相关阅读:
    Android 程序架构: MVC、MVP、MVVM、Unidirectional、Clean...
    asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    反射中使用 BindingFlags.IgnoreCase
    JQuery判断数组中是否包含某个元素$.inArray("js", arr);
    Sql日期时间格式转换
    c#组元(Tuple)的使用
    逆向最大匹配分词算法C#
    [WEB API] CLIENT 指定请求及回应格式(XML/JSON)
    Jquery 将表单序列化为Json对象
    JS调试加断点
  • 原文地址:https://www.cnblogs.com/ninghongkun/p/6275818.html
Copyright © 2020-2023  润新知