2011-08-14 102 views
0

Ive得到了一個文件下載的問題你能幫助我爲......多個圖像文件夾從保存到本地在asp.net

這裏是代碼:

DirectoryInfo directoryInfo = new DirectoryInfo(Server.MapPath(@"/Bailiffs/BailiffFiles/")); 
     string cukurNumber = string.Empty; 
     if (txtCukurNumber.Text != string.Empty) { 
      cukurNumber = txtCukurNumber.Text; 
     } 
     FileInfo[] fileInfoEnum = directoryInfo.GetFiles(cukurNumber + "*"); 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + txtCukurNumber.Text + ".zip");    
     Response.ContentType = "application/zip"; 
     using (ZipOutputStream zipStream = new ZipOutputStream(Response.OutputStream)) { 
      zipStream.SetLevel(9); 
      byte[] zipBuffer = new byte[4096]; 

      foreach (FileInfo fileInfo in fileInfoEnum) { 
       string fileFullName = fileInfo.FullName; 

       ZipEntry zipEntry = new ZipEntry(Path.GetFileName(fileFullName)); 

       zipEntry.DateTime = DateTime.Now; 

       zipStream.PutNextEntry(zipEntry); 

       using (FileStream fileStream = File.OpenRead(fileFullName)) { 
        int sourceBytes = 0; 
        do { 
         sourceBytes = fileStream.Read(zipBuffer, 0, zipBuffer.Length); 
         zipStream.Write(zipBuffer, 0, sourceBytes); 
        } while (sourceBytes > 0); 


       }      
      } 
      zipStream.Finish(); 
      zipStream.Close(); 
      Response.Flush(); 
      Response.End(); 
     } 

這個代碼必須獲得通過過濾器的所有圖像文件並保存到磁盤上,而瀏覽器保存文件對話框打開只是一個時間和一個奇怪的文件保存...其中,我做錯了什麼......

感謝..

編輯: Bizzarre文件問題現在解決的主要問題是單個文件保存,而不是多個.. 再次感謝...

+0

你能澄清:你想要的圖片到本地客戶端保存爲一個單一的形象?或者您是否希望它爲每個下載的圖像多次提示用戶? – Aaron

回答

2

雖然你正在循環目錄中的每個文件,一旦你做了你的Response.End()的第一次迭代循環,對用戶的響應就完成了。他們只會得到由枚舉器找到的第一個文件。

瀏覽器沒有以您嘗試的方式接收多個文件的概念。

您可能會考慮收集各種圖像文件並將它們放在一個ZIP文件中,然後將單個ZIP返回給用戶。

下面是示例代碼,將建立所述圖像的ZIP(使用SharZipLib)中,用所謂的「images.zip」

包括那些使用語句SharpZipLib單個文件回覆:

using ICSharpCode.SharpZipLib.Core; 
using ICSharpCode.SharpZipLib.Zip; 
using ICSharpCode.SharpZipLib.Checksums; 

然後在要流回的ZIP文件的方法:

DirectoryInfo directoryInfo = new DirectoryInfo(Server.MapPath(@"/Bailiffs/BailiffFiles/")); 
string cukurNumber = string.Empty; 
if (txtCukurNumber.Text != string.Empty) { 
    cukurNumber = txtCukurNumber.Text; 
} 

IEnumerable<FileInfo> fileInfoEnum = directoryInfo.EnumerateFiles(cukurNumber + "*"); 

    Response.Clear(); 

Response.AddHeader("Content-Disposition", "attachment;filename=images.zip"); 
Response.ContentType = "application/zip"; 

using(ZipOutputStream zipstream = new ZipOutputStream(Response.OutputStream)) { 

    zipstream.SetLevel(9); // 0-9, 9 being the highest compression 

    byte[] buffer = new byte[4096]; 

    foreach(FileInfo fileInfo in fileInfoEnum) { 

     string file = fileInfo.FullName; 

     ZipEntry entry = new 
     ZipEntry(Path.GetFileName(file)); 

     entry.DateTime = DateTime.Now; 
     zipstream.PutNextEntry(entry); 

     using(FileStream fs = File.OpenRead(file)) { 
      int sourceBytes; 
      do { 
       sourceBytes = fs.Read(buffer, 0, buffer.Length); 
       zipstream.Write(buffer, 0, sourceBytes); 
      } while(sourceBytes > 0); 
     } 
    } 

    zipstream.Finish(); 
    zipstream.Close(); 
} 

Response.Flush(); 
Response.End(); 
+0

謝謝@aaron,壓縮文件可能是有用的,但這不是問題...我的問題是單個文件保存到本地而不是多個我解決奇怪的文件問題的方式...再次感謝... –

+0

如果你想將所有圖像作爲單個文件保存到本地客戶端,您將需要構建單個圖像(將所有文件合併到一起),或按照我的建議壓縮它們。 – Aaron

+0

不是一個單獨的文件在一個下載單獨的文件,但由於瀏覽器的savefiledialog代碼無法達到其他人... –

相關問題