(一)一般处理程序(ashx)分段下载文件
2022/1/27 20:06:50
本文主要是介绍(一)一般处理程序(ashx)分段下载文件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
<a class="fancylink" href="../../infrastructure/handlers/file-download.ashx?id=29d7a2a3-ee66-4f24-af7c-2ad9fbb779bf">xxxx</a>
public class file_download : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var req = context.Request.QueryString;
string id = req["id"], relId = req["relId"], relType = req["relType"];
InfrastructureFiles file = null;
if (id.Is<Guid>())
file = InfrastructureFiles.GetById(new Guid(id));
else if (!string.IsNullOrEmpty(relId) && relType.Is<short>())
file = InfrastructureFiles.GetByRel(relId, relType.SafeParseEnum<FileRelTypes, short>());
if (file != null)
{
file.UpdateDownload();
try
{
string filename = file.FileName;
switch (file.RelType)
{
case (short)FileRelTypes.XheditorReceipt:
case (short)FileRelTypes.XheditorTrendOfWork:
case (short)FileRelTypes.XheditorProjData: break;
default: filename += Path.GetExtension(file.FileUrl); break;
}
long chunkSize = 204800;
byte[] buffer = new byte[chunkSize];
long dataToRead = 0;
FileStream stream = null;
try
{
string filePath = context.Server.MapPath(file.FileUrl);//路径
stream = new FileStream(filePath, FileMode.Open);
dataToRead = stream.Length;
context.Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
context.Response.AddHeader("Content-Length", dataToRead.ToString());
while (dataToRead > 0)
{
if (context.Response.IsClientConnected)
{
int length = stream.Read(buffer, 0, Convert.ToInt32(chunkSize));
context.Response.OutputStream.Write(buffer, 0, length);
context.Response.Flush();
buffer = new Byte[chunkSize];
dataToRead = dataToRead - length;
}
else
{
dataToRead = -1;
}
}
}
catch (Exception)
{
throw;
}
finally
{
if (stream != null)
{
stream.Close();
}
context.Response.Close();
}
//string filePath = context.Server.MapPath(file.FileUrl);//路径
//FileStream fs = new FileStream(filePath, FileMode.Open);
//byte[] bytes = new byte[(int)fs.Length];
//fs.Read(bytes, 0, bytes.Length);
//fs.Dispose();
//fs.Close();
//context.Response.ContentType = "application/octet-stream";
////通知浏览器下载文件而不是打开
//context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
//context.Response.BinaryWrite(bytes);
////context.Response.WriteFile(file.FileUrl);
//context.Response.Flush();
//context.Response.End();
//new HtmlOutput().TransmitFile(file.FileUrl,filename);
}
catch (HttpException)
{
}
}
else
new HtmlOutput().TransmitFile(null, null); // 找不到文件
}
public bool IsReusable
{
get
{
return false;
}
}
}
这篇关于(一)一般处理程序(ashx)分段下载文件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南