2013-03-13 1 views
2

У меня есть эта функция, я использую для сжатия списка файлов из сеанса пользователя, а затем потоковое его в браузер пользователя для загрузки:ошибка «Invalid папка» при сжатии файлов с SharpZipLib

public static void DownloadAllPhotos() 
{ 
    HttpContext.Current.Response.AddHeader(
     "Content-Disposition", "attachment; filename=Photos.zip"); 
    HttpContext.Current.Response.ContentType = "application/zip"; 

    List<string> photos= new List<string>(); 

    if (HttpContext.Current.Session != null && 
     HttpContext.Current.Session["userPhotos"] != null) 
    { 
     photos = (List<string>)HttpContext.Current.Session["userPhotos"]; 
    } 

    using (var zipStream = new 
     ZipOutputStream(HttpContext.Current.Response.OutputStream)) 
    { 
     foreach (string photoUrl in photos) 
     { 
      byte[] fileBytes = File.ReadAllBytes(photoUrl); 

      var fileEntry = new ZipEntry(
       Path.GetFileName(photoUrl)) 
      { 
       Size = fileBytes.Length 
      }; 

      zipStream.PutNextEntry(fileEntry); 
      zipStream.Write(fileBytes, 0, fileBytes.Length); 
     } 

     zipStream.Flush(); 
     zipStream.Close(); 

     // reset session 
     HttpContext.Current.Session["userPhotos"] = new List<string>(); 
    } 
} 

Когда у пользователя есть фотограммы в их сеансе, и они нажимают кнопку для вызова этой функции, файлы сжимаются и загрузка начинается в браузере пользователя.

Но когда я пытаюсь открыть сжатый файл, я получаю эту ошибку:

Windows cannot open the folder.

The compressed folder "{Path to my file}" is invalid.

я делаю что-то неправильно, что вызывает эту ошибку?

+0

Каков размер на диске загруженного zip-файла? – cfeduke

ответ

2

Обратите внимание, что размещение Response.Flush и ZipEntry.CleanName в this example и посмотреть, не написано ли что-то подобное.

0

Также согласно example в @cfeduke «ответ s, есть комментарий в „Создать Zip как вложения браузер загрузить в IIS“, который предлагает изменить Response.ContentType =„приложения/октет-поток“вместо of "application/zip"

// If the browser is receiving a mangled zipfile, IIS Compression may cause this problem. Some members have found that //Response.ContentType = "application/octet-stream" has solved this. May be specific to Internet Explorer.

Работал для меня. И это был не специфический IE (я использую Chrome).

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