夜微凉、的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  76 随笔 :: 24 文章 :: 22 评论 :: 24万 阅读

一、上传文件

  1、普通的form表单提交

  注意点:

  1. 请求方式必须为Post。
  2. form表单里必须设置enctype属性(enctype = "multipart/form-data")

下面的代码是实现Demo:  

复制代码
<div class="row">
    @using(Html.BeginForm("Export", "Home", FormMethod.Post, new { @class = "form-horzoontal", @enctype = "multipart/form-data" }))
    {
        <div class="form-group">
            <label class="label-control">请选择文件</label>
            <div class="col-md-4">
                @Html.TextBox("File","", new { @type="file",@class="form-ontrol"})
            </div>
        </div>
        <div class="form-group">
            <div class="clearfix">
                <button type="submit" class="btn btn-primary">
                    <i class="icon-ok"></i>提交
                </button>
                <button type="reset" class="btn btn-danger">
                    <i class="icon-undo"></i>重置
                </button>
            </div>
        </div>
    }
</div> 
View Code
复制代码
复制代码
/// <summary>
        /// 提交文件
        /// </summary>
        [HttpPost]
        public void Export(HttpPostedFileBase File)
        {
            //HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
            //HttpPostedFile file = files[0];
            //拓展名
            string Extension = System.IO.Path.GetExtension(File.FileName);
            //文件名
            string FileName = DateTime.Now.ToFileTime() + Extension;
            //文件存放路径
            string Path = Server.MapPath("~/upload/");
            //如果文件路径不存在 
            if (!System.IO.Directory.Exists(Path))
            {
                System.IO.Directory.CreateDirectory(Path);
            }

            File.SaveAs(Path + "//" + FileName);
        }
View Code
复制代码

  2、Ajax表单提交 

  注意点:

  1. 导入jquery.unobtrusive-ajax.min.jsjquery.form.js两个引用。
  2. 提交的时候必须用 $("#form").ajaxSubmit()的提交方式。否则接收不到文件流。 

  下面的代码是实现Demo:

 

复制代码
<div class="row">
    @using(Ajax.BeginForm("Export", "Home", null,new AjaxOptions { HttpMethod="Post"}, new {@id="form", @class = "form-horzoontal", @enctype = "multipart/form-data" }))
    {
        <div class="form-group">
            <label class="label-control">请选择文件</label>
            <div class="col-md-4">
                @Html.TextBox("File","", new { @type="file",@class="form-ontrol"})
            </div>
        </div>
        <div class="form-group">
            <div class="clearfix">
                <button type="button" class="btn btn-primary" onclick="sub()">
                    <i class="icon-ok"></i>提交
                </button>
                <button type="reset" class="btn btn-danger">
                    <i class="icon-undo"></i>重置
                </button>
            </div>
        </div>
    }
</div> 
@section Scripts{
<script src="~/Scripts/jquery-1.8.2.min.js"></script> 
<script src="~/Scripts/jquery.form.js"></script> 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script>
    //ajax提交表单
    function sub() {
        $("#form").ajaxSubmit();  
    }
</script>
}
View Code
复制代码
复制代码
/// <summary>
        /// 提交文件
        /// </summary>
        [HttpPost]
        public void Export(HttpPostedFileBase File)
        {
            //HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
            //HttpPostedFile file = files[0];
            //拓展名
            string Extension = System.IO.Path.GetExtension(File.FileName);
            //文件名
            string FileName = DateTime.Now.ToFileTime() + Extension;
            //文件存放路径
            string Path = Server.MapPath("~/upload/");
            //如果文件路径不存在 
            if (!System.IO.Directory.Exists(Path))
            {
                System.IO.Directory.CreateDirectory(Path);
            }

            File.SaveAs(Path + "//" + FileName);
        }
View Code
复制代码

 二、下载文件

  下面是两种实现方式

  1、

复制代码
/// <summary>
        /// 下载文件
        /// </summary>
        public void DownloadFile()
        {
            //获取respone对象
            HttpResponse respone = System.Web.HttpContext.Current.Response;
            //文件绝对路径
            string Path = Server.MapPath("~/upload/131348099436645924.JPG");
            string fileName = System.IO.Path.GetFileName(Path);
            System.IO.FileInfo file = new FileInfo(Path); 
            Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + "\"");
            Response.AddHeader("Content-Length", file.Length.ToString()); 
            //响应类型
            Response.ContentType = "application/octet-stream";
            Response.WriteFile(Path);
            Response.Flush();
            Response.End();
        }
View Code
复制代码

  2、

复制代码
/// <summary>
        /// 下载文件
        /// </summary>
        public FileResult DownloadFile()
        { 
            //文件绝对路径
            string Path = Server.MapPath("~/upload/131348099436645924.JPG");
            string fileName = System.IO.Path.GetFileName(Path);
            return File(Path, "application/octet-stream",fileName);
        }
View Code
复制代码

 

posted on   夜、微凉  阅读(537)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示