2010-03-16 2 views
4
string fileName = "test.zip"; 
string path = "c:\\temp\\"; 
string fullPath = path + fileName; 
FileInfo file = new FileInfo(fullPath); 

Response.Clear(); 
Response.ClearContent(); 
Response.ClearHeaders(); 
Response.Buffer = true; 
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName); 
Response.AppendHeader("content-length", file.Length.ToString()); 
Response.ContentType = "application/x-compressed"; 
Response.TransmitFile(fullPath); 
Response.Flush(); 
Response.End(); 

Фактический zip-файл c: \ temp \ test.zip является хорошим, действительным, независимо от того, что вы хотите назвать. Когда я перейду в каталог c: \ temp \ и дважды щелкните файл test.zip; он открывается прямо вверх.ASP.NET Создайте zip-файл для загрузки: сжатая папка с zipped недействительна или повреждена

Моя проблема, кажется, только в том, что касается загрузки. Вышеприведенный код без проблем. Представлен диалог загрузки файлов. Я могу выбрать либо сохранить, либо открыть. Если я попытаюсь открыть файл из диалога или сохранить его, а затем открыть. Я получаю следующее диалоговое сообщение:

Сжатая (замятая) папка недействительна или повреждена.

Для Response.ContentType Я пробовал:

применение/х-сжат применение/х-зип-сжат применение/х-GZIP-compresse приложения/октет-поток приложение/почтовый

файл почтового индекса создается с некоторым предшествующим кодом (что я уверен, что работает отлично благодаря своей способности открыть созданный файл непосредственно) с помощью: Ionic.zip

http://www.codeplex.com/DotNetZip

+0

Просто догадка, скачанный файл того же размера, что и оригинал? – CResults

ответ

21

Это сработало. Я не знаю, почему, но это так.

string fileName = "test.zip"; 
string path = "c:\\temp\\"; 
string fullPath = path + fileName; 
FileInfo file = new FileInfo(fullPath); 

Response.Clear(); 
//Response.ClearContent(); 
//Response.ClearHeaders(); 
//Response.Buffer = true; 
Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName); 
//Response.AppendHeader("Content-Cength", file.Length.ToString()); 
Response.ContentType = "application/x-zip-compressed"; 
Response.WriteFile(fullPath); 
//Response.Flush(); 
Response.End(); 
+0

Также работал здесь, спасибо. Проблема заключается в том, что: Response.AppendHeader («Content-Length», file.Length.ToString()) и Response.Flush() он не работал с тем или иным, но работает без них. Кто-то может это объяснить? В любом случае спасибо Джейсон :) – Nei

Смежные вопросы