zoukankan      html  css  js  c++  java
  • ASP.NET知识总结(5.文件上传 文件下载)

    5、文件上传

    -》说明:使用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格式,而是在请求体中使用分隔符划分

    -》限制:不允许上传可执行文件,只允许上传静态文件

    例:只允许上传图片

    客户端校验

    服务器端校验

    -》提高:将文件保存到对应年、月、日文件夹下,以方便遍历

    动态创建路径

    拼接路径信息

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
    </head>
    <body>
        <form action="UploadTest.ashx" method="post" enctype="multipart/form-data" id="form1">
            <input type="text" name="filename" />
            <br />
            <input type="file" name="f1" id="f1" />
            <input type="submit" value="上传" />
    
        </form>
    </body>
    </html>
    public class UploadTest : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/html";
                //根据键接收文件
                string filename = context.Request["filename"];
                HttpPostedFile file1 = context.Request.Files["f1"];
    
                //保存
                string path = context.Request.MapPath("/Uploads/");
                string path2 = "/uploads/";
                //file1.SaveAs(path+file1.FileName);
                //获取文件的扩展名
                string ext = Path.GetExtension(file1.FileName);
                if (ext != ".jpg")
                {
                    context.Response.Write("文件格式不正确");
                    return;
                }
                //向特定文件夹进行保存
                DateTime now = DateTime.Now;
                path += now.Year + "/" + now.Month + "/" + now.Day + "/";
                path2 += now.Year + "/" + now.Month + "/" + now.Day + "/";
    
                //判断该路径文件是否存在
                if (!Directory.Exists(path))
                {
                    //创建
                    Directory.CreateDirectory(path);
                }
    
                file1.SaveAs(path + filename + ext);
    
                //显示
                context.Response.Write("<img src='" + path2 + filename+ext + "'>");
    
    
    
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }

    6、文件下载

    -》使用超链接直接指定要下载的文件

    能被浏览器解析的文会被显示

    不能被浏览器解析的文件会被下载

    -》实现:无论文件格式,都不使用浏览器显示,完成下载

    指向一般处理程序,文件地址作为参数

    修改响应头:ContentType = "application/octet-stream";

    设置头信息:AddHeader("Content-Disposition", "attachment; filename="文件名";");

    输出文件:context.Response.WriteFile(文件地址);

    -》提示:如果中文文件名乱码,可以进行url编码

    HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);

    返回一个字符串,作为文件的名字

    《实例:aspnet项目复习/第二天/t1_Upload_Download

    <body>

    <a href="Uploads/sg2.jpg">sg2</a><br />
    <a href="Uploads/美女.jpg" >美女</a><br />
    <a href="Uploads/redgreen.swf">Uploads/redgreen.swf</a><br />
    <a href="Uploads/redgreen.rar">Uploads/redgreen.rar</a>
    <hr />
    <hr />
    <hr />
    <hr />
    <a href="/DownloadTest.ashx?f1=Uploads/sg2.jpg">sg2</a><br />
    <a href="/DownloadTest.ashx?f1=Uploads/美女.jpg">美女</a><br />
    <a href="/DownloadTest.ashx?f1=Uploads/redgreen.swf">Uploads/redgreen.swf</a><br />
    <a href="/DownloadTest.ashx?f1=Uploads/redgreen.rar">Uploads/redgreen.rar</a>

    </body>

    public class DownloadTest : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                string f1=context.Request["f1"];
    
                //指定为下载操作
                context.Response.ContentType = "application/octet-stream";
    
                //附加头信息,表示保存文件时的文件名
                context.Response.AddHeader("Content-Disposition","attachment;filename=""+f1+"";");
    
                //输出文件
                context.Response.WriteFile(context.Request.MapPath(f1));
                
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
  • 相关阅读:
    加入创业公司有什么利弊
    Find Minimum in Rotated Sorted Array II
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Find Minimum in Rotated Sorted Array
    Remove Duplicates from Sorted Array
    Spiral Matrix
    Spiral Matrix II
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/fenger-VIP/p/4317877.html
Copyright © 2011-2022 走看看