站点间传送文件不匹配

NoGodFox 2013-11-01 04:45:13
需求是要在A站点中传送ZIP包到B站点中去。
可是传送的文件无法匹配。连大小都不一样。接收到的总是小。

A站点代码:

//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();//结束文件下载


B站点代码:
//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";
}
}


...全文
157 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
微工程 2013-11-04
  • 打赏
  • 举报
回复
给我留私言,我给你可以成功的代码 请原谅没直接回答; 因为不接贴的人越来越多,没信心直接回答了!
  • 打赏
  • 举报
回复
调试一下看看
AppleII 2013-11-03
  • 打赏
  • 举报
回复
使用WebClient或HttpWebRequest http://www.okbase.net/doc/details/2579

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧