我正在使用c#.net应用程序,我需要使用c#codebase下载一个zip文件。我使用以下代码下载文件:
Response.ContentType = "application/zip"
Response.AppendHeader("Content-Disposition", string.Format("attachment; filename = {0}", System.IO.Path.GetFileName(sZipFileName)));
Response.TransmitFile(sZipFilePath);
HttpContext.Current.ApplicationInstance.CompleteRequest();
传输了zip文件,但是当我在下载后尝试打开zip文件时,我收到一条错误消息“无法打开文件:该文件看起来不是有效的存档”
请告诉我我在哪里做错了以及如何获取zip文件并将其解压缩而没有任何错误。
先谢谢
答案 0 :(得分:5)
我不确定你的代码片段为什么不能正常工作,但这里有一些我用来在我的应用程序中做同样事情的代码。希望它有所帮助。
var updateFile = new FileInfo("path/to/file");
Response.ContentType = "application/octet-stream";
Response.AddHeader("content-disposition", "attachment;filename=\"" + Path.GetFileName(updateFile.FullName) + "\"");
Response.AddHeader("content-length", updateFile.Length.ToString());
Response.TransmitFile(updateFile.FullName);
Response.Flush();
答案 1 :(得分:1)
尝试在脚本末尾添加Response.End()
。
答案 2 :(得分:0)
尝试使用Response.WriteFile(sZipFilePath);
答案 3 :(得分:0)
尝试:
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + "test.zip");
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.BinaryWrite(ba);
HttpContext.Current.Response.End();
其中ba是表示zip文件的字节数组
答案 4 :(得分:0)
我正在使用它:
Response.ContentType = "application/zip" ;
Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(path)));
Response.WriteFile(path);
Response.End();
其中变量路径是(本地)文件的完整路径
答案 5 :(得分:0)
您是在服务器上压缩文件,还是下载已压缩的文件? 我认为如果使用jscript,返回压缩文件会有问题。 如果没有,那么你没有正确地返回被压缩的文件名。
我也是这样做的,制作压缩文件,然后下载它。 我使用了c#,jscript和asp.net。
它对我来说很完美。 我将文件/文件传递给jscript文件,并且jscript调用一个方法来压缩文件,当在服务器上完成压缩时,服务器将其返回给客户端并自动开始下载。
答案 6 :(得分:0)
我不知道你使用的是什么机器......但是在Vista使用FAt32编码的zip文件之前发布了Windows,Vista Microsft开始使用NTFS作为文件格式。 请检查您的存档文件格式,因为当用户使用XP操作系统并且我在win7中创建存档时,我遇到了非常类似的情况(错误消息与您发布的相同)。 最好的问候,
答案 7 :(得分:0)
我测试了流动的代码并且它可以工作,所以分享它。
我做的一件强制性事情是使用“Response.Flush();
”。
private void DownloadCandidateDocument()
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
var buffer = new byte[] {};
buffer = get you byte array here from service or file system
if (buffer.Length > 0)
{
Response.ContentType = "application/zip";
Response.BinaryWrite(buffer);
var fileName = "myzipfile";
Response.AddHeader("content-disposition",
string.Format(@"attachment;filename=""{0}""", fileName));
Response.Flush();
}
}