62,243
社区成员




//fileName为文件路径
FileInfo zipFile = new FileInfo(fileName);
FileStream r = zipFile.OpenRead();
context.Response.Buffer = false;
context.Response.HeaderEncoding = Encoding.Default;
context.Response.ContentEncoding = Encoding.Default;
context.Response.AddHeader("Connection", "Keep-Alive");
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(HttpUtility.UrlEncode(tempUrl.Replace("/", "") + ".zip", Encoding.Default))); // 此处文件名如果是中文在浏览器默认是筹码,应该加HttpUtility.UrlEncode(filename)
context.Response.AddHeader("Content-Length", r.Length.ToString());
while (true) //如果文件大于缓冲区,通过while循环多次加载文件
{
//开辟缓冲区空间
byte[] buffer = new byte[1024]; //读取文件的数据
int leng = r.Read(buffer, 0, 1024);
if (leng == 0)//到文件尾,结束
{
break;
}
if (leng == 1024)//读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
{
context.Response.BinaryWrite(buffer);//向客户端发送数据流
}
else
{
//读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
byte[] b = new byte[leng]; for (int i = 0; i < leng; i++)
b[i] = buffer[i];
context.Response.BinaryWrite(b);
}
}
r.Flush();
r.Close();//关闭下载文件
//context.Response.End();//结束文件下载
//url为A站对应handler地址,postData为参数
string result = ValuePageHelper.Post(url, postData);
string savePath = (context.Server.MapPath(StringHelper.Remove(tempUrl, "/") + ".zip"));
if (File.Exists(savePath))
{
File.Delete(savePath);
}
//File.Create(savePath);
MemoryStream memoryStream = new MemoryStream(Encoding.Default.GetBytes(result));
FileStream zipFile = new FileStream(savePath, FileMode.Create);
memoryStream.WriteTo(zipFile);
memoryStream.Close();
zipFile.Close();
memoryStream = null;
zipFile = null;
/// <summary>
/// 后台Post提交
/// </summary>
/// <param name="url">要提交的URL</param>
/// <param name="postData">request传递格式.Example:a=1&b=2</param>
/// <returns></returns>
public static string Post(string url, string postData)
{
try
{
byte[] byteArray = Encoding.Default.GetBytes(postData);
HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(url); //发送地址
objWebRequest.Method = "POST";//提交方式
objWebRequest.ContentType = "application/x-www-form-urlencoded";
objWebRequest.ContentLength = byteArray.Length;
Stream newStream = objWebRequest.GetRequestStream(); // Send the data.
newStream.Write(byteArray, 0, byteArray.Length); //写入参数
newStream.Close();
HttpWebResponse response = (HttpWebResponse)objWebRequest.GetResponse();
//获取响应
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
return sr.ReadToEnd(); // 返回的数据
}
catch (Exception)
{
return "false";
}
}