下载文件和将文件转换为数据流下载的示例C#
2016-02-04 12:43
363 查看
下载文件和将文件转换为数据流下载的示例C#
protected void Page_Load(object sender, EventArgs e)
{
string file = Request["file"];
if (string.IsNullOrEmpty(file))
return;
string filepath = Server.MapPath("~/Download/" + file);
if (File.Exists(filepath))
//DownLoadStreamFile(filepath);
ToOpen(filepath, "");
Response.End();
}
/// <summary>
/// 下载文件
/// </summary>
/// <param name="serverfilpath"></param>
/// <param name="filename"></param>
public static void ToDownload(string serverfilpath, string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
long fileSize = fileStream.Length;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=/"" + UTF_FileName(filename) + "/";");
////attachment --- 作为附件下载
////inline --- 在线打开
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
HttpContext.Current.Response.BinaryWrite(fileBuffer);
fileStream.Close();
HttpContext.Current.Response.End();
}
/// <summary>
/// 打开文件
/// </summary>
/// <param name="serverfilpath"></param>
/// <param name="filename"></param>
public static void ToOpen(string serverfilpath, string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
long fileSize = fileStream.Length;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=/"" + UTF_FileName(filename) + "/";");
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
HttpContext.Current.Response.BinaryWrite(fileBuffer);
fileStream.Close();
HttpContext.Current.Response.End();
}
private static string UTF_FileName(string filename)
{
return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
}
/// <summary>
/// 下载文件数据流
/// </summary>
/// <param name="serverfilpath"></param>
public static void DownLoadStreamFile(string serverfilpath)
{
int blocksize = 1024 * 100;
byte[] buffer = new byte[blocksize];
byte[] fileHeader = new byte[101];
int startindex = 0;
int bytesread = 0;
int bytesfinish = 0;
int filesize = 0;
string headerText = string.Empty;
BinaryReader bReader = null;
bReader = new BinaryReader(File.OpenRead(serverfilpath));
filesize = Convert.ToInt32(bReader.BaseStream.Length);
while (bytesfinish < filesize)
{
if (bytesfinish + blocksize < filesize)
bytesread = bReader.Read(buffer, startindex, blocksize);
else
bytesread = bReader.Read(buffer, startindex, filesize - bytesfinish);
bytesfinish += bytesread;
HttpContext.Current.Response.OutputStream.Write(buffer, 0, bytesread);
}
bReader.Close();
HttpContext.Current.Response.End();
}
protected void Page_Load(object sender, EventArgs e)
{
string file = Request["file"];
if (string.IsNullOrEmpty(file))
return;
string filepath = Server.MapPath("~/Download/" + file);
if (File.Exists(filepath))
//DownLoadStreamFile(filepath);
ToOpen(filepath, "");
Response.End();
}
/// <summary>
/// 下载文件
/// </summary>
/// <param name="serverfilpath"></param>
/// <param name="filename"></param>
public static void ToDownload(string serverfilpath, string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
long fileSize = fileStream.Length;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=/"" + UTF_FileName(filename) + "/";");
////attachment --- 作为附件下载
////inline --- 在线打开
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
HttpContext.Current.Response.BinaryWrite(fileBuffer);
fileStream.Close();
HttpContext.Current.Response.End();
}
/// <summary>
/// 打开文件
/// </summary>
/// <param name="serverfilpath"></param>
/// <param name="filename"></param>
public static void ToOpen(string serverfilpath, string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
long fileSize = fileStream.Length;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=/"" + UTF_FileName(filename) + "/";");
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, 0, (int)fileSize);
HttpContext.Current.Response.BinaryWrite(fileBuffer);
fileStream.Close();
HttpContext.Current.Response.End();
}
private static string UTF_FileName(string filename)
{
return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
}
/// <summary>
/// 下载文件数据流
/// </summary>
/// <param name="serverfilpath"></param>
public static void DownLoadStreamFile(string serverfilpath)
{
int blocksize = 1024 * 100;
byte[] buffer = new byte[blocksize];
byte[] fileHeader = new byte[101];
int startindex = 0;
int bytesread = 0;
int bytesfinish = 0;
int filesize = 0;
string headerText = string.Empty;
BinaryReader bReader = null;
bReader = new BinaryReader(File.OpenRead(serverfilpath));
filesize = Convert.ToInt32(bReader.BaseStream.Length);
while (bytesfinish < filesize)
{
if (bytesfinish + blocksize < filesize)
bytesread = bReader.Read(buffer, startindex, blocksize);
else
bytesread = bReader.Read(buffer, startindex, filesize - bytesfinish);
bytesfinish += bytesread;
HttpContext.Current.Response.OutputStream.Write(buffer, 0, bytesread);
}
bReader.Close();
HttpContext.Current.Response.End();
}
相关文章推荐
- ___77__线程的使用__Thread
- ___20__virtual虚方法,子类继承自定义求面积方法
- c#中单元测试
- ___19__C#手动编写Stack类,模拟栈的数据操作
- Unicon字符串转成汉字String
- ___18__定义Rectangle类,使用【重载操作符】进行对象各种操作
- __17__Class类的使用,实例化一个人,并设置各项属性
- ___16__C#IO创建Text文件并读取显示
- C#导出Excel,并且设置Excel单元格格式,合并单元格.
- C#合并excel单元格,操作合并后的单元格 (winform导出excel)
- __15__C#基础的位运算
- C# 字符串乱码
- C#实现注册码 CPU序列号,生成机器码 生成注册码 判断是否注册
- C# 读取机器码,CPU序列号,生成注册码类(优化)
- _14__enum___Weekday得到某日的下一日(星期几)
- c# 邮件发送功能
- C# 实现 省市区三级联动(表中包含经纬度取自淘宝地址管理)
- c#,字典,Dictionary
- C#DateTime各种使用
- c# 写入数据到excel文件