• 上传文件 | 下载文件


     HttpPostedFile 和 HttpPostedFileBase 你真的了解嘛?

    上传文件


    client:HtmlPage1.html

    <!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>
        <!--上传文件的时候:
            1>必须使用Post方式来提交数据
            2>必须设置enctype属性值为multipart/form-data,表示将数据以二进制的方式提交到server;
            假设不设置的话enctype的默认值为application/x-www-form-urlencoded,表示将数据以键值对的方法是提交到server
        -->
        <form action="Handler1.ashx" method="post" enctype="multipart/form-data">
            <input type="file" name="fileName" value="" />
            <input type="submit"  value="上传"/>
        </form>
    </body>
    </html>

    服务端:Handler1.ashx

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Web;
    
    namespace 上传文件
    {
        /// <summary>
        /// Handler1 的摘要说明
        /// </summary>
        public class Handler1 : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                //设置报文头的content-type属性
                context.Response.ContentType = "text/plain";
                
                //获取浏览器发送过来的文件数据。
                HttpPostedFile file = context.Request.Files["fileName"];
           
                //获取上传的文件名称。
                string fileName= file.FileName;
    
                
                //int fileLength = context.Request.ContentLength; 事实上我们也能够获取文件的大小
    
                //取一个新的名字(在旧文件名称前加上一个Guid就是为了防止上传的文件重名,产生冲突)
                string newfileName = Guid.NewGuid().ToString() + "_" + fileName;
    
                //将这个文件保存到项目下的files目录中
                file.SaveAs(context.Server.MapPath("files")+"/" + newfileName);
    
                context.Response.Write("OK");
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }





    下载文件

    client:HtmlPage1.html

    <!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>
           <a href="Handler1.ashx?fileName=123.jpg">123.jpg</a><br/>
           <a href="Handler1.ashx?

    fileName=abc.txt">abc.txt</a><br /> <a href="Handler1.ashx?

    fileName=word.docx">word.docx</a><br /> <a href="Handler1.ashx?fileName=介绍信模板.xls">介绍信模板.xls</a><br /> </form> </body> </html>


    服务端:Handler1.ashx

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace 下载文件
    {
        /// <summary>
        /// Handler1 的摘要说明
        /// </summary>
        public class Handler1 : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
    
               
    
                //获取用户要下载的资源名称
                string filename = context.Request["fileName"];
    
                //加入报文头(请參考:http://blog.csdn.net/fanbin168/article/details/38535735)
                context.Response.AddHeader("Content-disposition", "attachment; filename=" +context.Server.UrlDecode( filename)); 
    
                //获取到用户要下载的资源后。读取磁盘文件,把该文件发送给client
                context.Response.WriteFile("~/Download/" + filename);
    
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    



    批量文件上传



    使用ploadify插件进行文件上传

    在视图页面中使用uploadify插件。进行文件上传 (uploadify插件去官网:http://www.uploadify.com去下载)

    參考资料:Uploadify/uploadifive上传(中文文档)

    控制器

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Web;
    using System.Web.Mvc;
    
    namespace WebApp.Controllers
    {
        public class TestController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
            /// <summary>
            /// 文件上传
            /// </summary>
            /// <param name="Filedata"></param>
            /// <returns></returns>
            public ActionResult FilesUpload(HttpPostedFileBase Filedata)
            {
                // 假设没有上传文件
                if (Filedata == null ||string.IsNullOrEmpty(Filedata.FileName) ||Filedata.ContentLength == 0)
                {
                    return this.HttpNotFound();
                }
    
                // 保存到 ~/zhaopian 目录中。名称不变
                string filename = System.IO.Path.GetFileName(Filedata.FileName);
                string virtualPath = string.Format("~/zhaopian/{0}", filename);
                // 文件系统不能使用虚拟路径,所以这里须要将虚拟路径转换成物理路径
                string path = this.Server.MapPath(virtualPath);
    
                //保存文件
                Filedata.SaveAs(path);
                return this.Json(new { });
            }
        }
    }
    视图

    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>上传插件測试</title>
        @Scripts.Render("~/bundles/jquery")
        @Styles.Render("~/Content/css")
    
        <link href="~/Scripts/uploadify/uploadify.css" rel="stylesheet" />
        <script src="~/Scripts/uploadify/jquery.uploadify.js"></script>
    </head>
    <body>
        <input id="file_upload" name="file_upload" type="file" multiple="true">
    </body>
    </html>
    <script type="text/javascript">
        $(function () {
            $("#file_upload").uploadify({
                swf: "/Scripts/uploadify/uploadify.swf",    //指定上传控件的主体文件
                uploader: "/Test/FilesUpload",   //指定server端上传处理文件
                 60,                          // button的宽度
                height: 23,                         // button的高度
                buttonText: "上传",                 // button上的文字
                buttonCursor: 'hand',                // button的鼠标图标
                fileObjName: 'Filedata',            // 上传參数名称
    
                // 两个配套使用
                fileTypeExts: "*.jpg;*.png",             // 扩展名
                fileTypeDesc: "请选择 jpg png 文件",     // 文件说明
    
                auto: true,                // 选择之后。自己主动開始上传
                multi: true,               // 是否支持同一时候上传多个文件
                queueSizeLimit: 5          // 同意多文件上传的时候,同一时候上传文件的个数
    
            });
        });
    </script>




    
  • 相关阅读:
    一本通课后练习 / 高手训练
    毒瘤 dp 题做题记录
    埃及分数
    CF340E Iahub and Permutations
    NOI2020 SDOI 爆零记
    Codeforces *1400-1600 做题记录
    Codeforces Round #636 (Div 3) 题解
    Codeforces Round #634 (Div 3) 题解
    洛谷 P4231 三步必杀
    【洛谷】【线段树+位运算】P2574 XOR的艺术
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6931661.html
Copyright © 2020-2023  润新知