.Net文件下载方式。。。。

  之前在写上传文件、下载文件的时候,发现Response对象里面有好几种下载文件的方式,之后自己亲自实践了这几种方法,记录下以便以后复习。。。

WriteFile文件下载

      public void getFile(string path, string fileName)
{
FileInfo fileInfo = new FileInfo(path);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/octet-stream";//设置输出流的 HTTP MIME 类型
//Content-Disposition 为二进制格式提供已知MIME类型的“文件下载”对话框或建议动态内容的文件名的机会
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));// URL 字符串进行编码,防止出现乱码
//回应消息体的长度,以 字节 (8位为一字节)为单位
Response.AddHeader("Content-Length", fileInfo.Length + "");
//文件传输编码 二进制
Response.AddHeader("Content-Transfer-Encoding", "binary");
//指定文件的内容作为文件块直接写入 HTTP 响应输出流
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}

BinaryWrite流文件下载

     public void getFile1(string path, string fileName)
{
FileStream stream = File.Open(path, FileMode.Open); // FileStream stream = new FileStream(path,FileMode.Open);
byte[] buffer = new byte[(int)stream.Length];
stream.Read(buffer, , buffer.Length);
stream.Close();//文件流需要手动关闭,或者用using自动关闭
Response.Clear();
Response.ContentType = "application/octet-stream";
//通知浏览器下载
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
//将二进制字符串写入 HTTP 输出流,已经是二进制了,就不需要 Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.BinaryWrite(buffer);
Response.Flush();
Response.End();
}

大文件分块下載

  public void getFile2(string path, string fileName)
{
FileInfo fileInfo = new FileInfo(path);
if (fileInfo.Exists)
{
const long standardSize = *;//定义一个静态常量,每次读取200K,缓解服务器压力(大文件更好下载)
FileStream stream = File.OpenRead(path);
byte[] buffer = new byte[standardSize];
long dataFielSize = stream.Length;//下载文件总大小
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName));
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentEncoding = System.Text.Encoding.Default;
if (dataFielSize > && Response.IsClientConnected)
{
int readLengtn = stream.Read(buffer, , (int)standardSize);
Response.OutputStream.Write(buffer, , readLengtn);
Response.Flush();
dataFielSize = dataFielSize - readLengtn;
}
stream.Close();
Response.Close();
}
}

TransmitFile文件下载

    public void getFile4(string path, string fileName)
{
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName));
Response.TransmitFile(path);
}

JSWindow打开文件

    public void getFile3(string path)
{
Response.Write("<script>window.open('" + path + "')</script>");//文件打开可以下载,图片打开就是在线预览
}

方法调用函数如下:

   protected void btnn_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
//var aa = Request.MapPath("../Pages/uploadfiles");//Request对象获取绝对路径
var filesArr = Directory.GetFiles(Server.MapPath("../Pages/uploadfiles"));//Server对象获取绝对路径
var tempArr = filesArr[].Split('\\');
var jsdownLoadUrl = "../Pages/uploadfiles/" + tempArr[tempArr.Length - ];
var fileName = "图片下载";
switch (btn.ID)
{
case "btn1":
getFile(filesArr[], fileName);
break;
case "btn2":
getFile1(filesArr[], fileName);
break;
case "btn3":
getFile2(filesArr[], fileName);
break;
case "btn4":
getFile3(jsdownLoadUrl);
break;
case "btn5":
getFile4(filesArr[], fileName);
break;
default:
break;
} }

.net几种文件下载的方法的更多相关文章

  1. WordPress忘记密码找回登录密码的四种行之有效的方法

    WordPress忘记密码找回登录密码的四种行之有效的方法 PS:20170214更新,感谢SuperDoge同学提供的方法,登入phpMyAdmin后,先从左边选自己的数据库,然后点上面的 SQL ...

  2. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  3. .NET中常用的几种解析JSON方法

    一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...

  4. IOS开发-几种截屏方法

    IOS开发-几种截屏方法 1.        UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomSc ...

  5. C语言的几种取整方法

    C语言的几种取整方法 来源:http://blog.sina.com.cn/s/blog_4c0cb1c001013ha9.html 1.直接赋值给整数变量.如: int i = 2.5; 或 i = ...

  6. 24种设计模式--模版方法模式【Template Method Pattern】

    周三,9:00,我刚刚坐到位置,打开电脑准备开始干活.“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑.还不等大家坐稳,老大就开讲了,“告诉大家一个好消息,昨天终于把牛叉模型公司的 ...

  7. VB几种函数参数传递方法,Variant,数组,Optional,ParamArray

    VB几种函数参数传递方法,Variant,数组,Optional,ParamArray 一) 过程的参数被缺省为具有 Variant 数据类型. 1)ByRef按 地址传递参数在 VB 中是缺省的 按 ...

  8. IIS支持APK/ISO文件下载的方法

    默认把安卓手机应用或游戏的apk格式文件上传到服务器空间是不能直接下载的,这是因为IIS的默认MIME类型中没有.apk文件,所以无法下载.@VCOO 既然.apk无法下载是因为没有MIME,那么添加 ...

  9. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

随机推荐

  1. Android 性能测试初探(一)

    Android 性能测试,跟 pc 性能测试一样分为客户端及服务器,但在客户端上的性能测试分为 2 类: 一类为 rom 版本的性能测试 一类为应用的性能测试 对于应用性能测试,包括很多测试项,如启动 ...

  2. PAT_A1116#Come on! Let's C

    Source: PAT A1116 Come on! Let's C (20 分) Description: "Let's C" is a popular and fun prog ...

  3. C#第九节课

    try catch using System;using System.Collections.Generic;using System.Linq;using System.Text;using Sy ...

  4. 递归、作用域、生命周期(day09)

    数组可以作为形式参数使用 数组做形式参数的时候真正的形式参数并 不是数组而是一个可以作为数组使用的 变量 数组形式参数里包含的存储区都不是被调用 函数提供的 声明数组形式参数的时候可以省略中括号 里的 ...

  5. C语言开发框架、printf(day02)

    C语言里包含以.c作为扩展名的文件,这种 文件叫源文件.C语言程序的绝大部分内容 应该记录在源文件里. C语言里还包括以.h作为扩展名的文件,这种 文件叫头文件. C语言程序里可以直接使用数字和加减乘 ...

  6. [Ynoi2011]D1T1

    题目大意: 给定一个序列$a_1,a_2,\dots,a_n$,进行$m$次操作,每次操作如下: 1. 给定$x,y,z$,对所有下标为$y,y+x,y+2x,\dots$的元素加上$z$(保证$y\ ...

  7. 爬虫框架Scrapy初步使用

    本文转载自: Scrapy 爬取并分析酷安 6000 款 App,找到良心佳软(抓取篇) https://www.makcyun.top/web_scraping_withpython10.html ...

  8. Maven学习总结(26)——maven update时,报:Preference node "org.eclipse.wst.validation"...

    详细情况如下: An internal error occurred during: "Updating Maven Project". Preference node " ...

  9. Elasticsearch 分页坑之---评分一致导致数错乱

    面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>>   1.背景介绍 最近搞es搜索,match查询默认按照评分排序,发现有一部分数据评分一致,一开始也没注意,客户端调用 ...

  10. 洛谷—— P2690 接苹果

    https://www.luogu.org/problem/show?pid=2690 题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵 ...