2010-10-21 41 views
8

tôi có danh sách tệp có hộp kiểm cho từng tệp, nếu người dùng kiểm tra nhiều tệp và nhấp vào tải xuống, tôi phải nén tất cả các tệp đó và tải xuống ... như trong tệp đính kèm trong thư.tải xuống nhiều tệp dưới dạng zip .net

. tôi đã sử dụng đề cập đến mã trong này post for single file download

pls giúp làm thế nào để tải nhiều dữ liệu như zip ..

Trả lời

22

Bạn cần đóng gói tệp và ghi kết quả vào phản hồi. Bạn có thể sử dụng thư viện nén SharpZipLib.

Mã dụ:

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

using (var zipStream = new ZipOutputStream(Response.OutputStream)) 
{ 
    foreach (string filePath in filePaths) 
    { 
     byte[] fileBytes = System.IO.File.ReadAllBytes(filePath); 

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

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

    zipStream.Flush(); 
    zipStream.Close(); 
} 
+0

Điều đó thật tuyệt ... xứng đáng với một upvote. Bạn có biết nếu có bất kỳ thời gian thực nào để biết kích thước nén không? Tôi muốn có thể cho người dùng biết kích thước của những gì họ sẽ tải xuống nếu được nén. – pearcewg

+1

@pearcewg, tôi nghĩ trong trường hợp này giải pháp phụ thuộc vào yêu cầu của bạn. Nếu bạn biết nội dung của lưu trữ, bạn có thể nén tệp trước khi tạo trang và chỉ hiển thị kích thước của lưu trữ. Nếu nội dung của các lưu trữ có thể thay đổi thì đó là nhiệm vụ không thuận lợi. Suy nghĩ của tôi là: 1. đặt thông tin về kích thước tệp nén trong cơ sở dữ liệu 2. hiển thị kích thước xấp xỉ của các tệp nén theo thống kê nén. – bniwredyc

+0

hoạt động như một sự quyến rũ. Cảm ơn –

1

Tạo một file ZIP on the fly sử dụng http://www.icsharpcode.net/opensource/sharpziplib/.

+0

có thể tạo ở định dạng rar ,,, – deepu

+0

@deepu có thể bạn sẽ phải sử dụng rar.exe để tạo tệp rar. – Fedearne

+0

Chủ đề này có một số thông tin liên quan đến RAR: http://stackoverflow.com/questions/1025863/read-content-of-rar-files-using-c. –

0

3 thư viện tôi biết là SharpZipLib (định dạng đa năng), DotNetZip (tất cả mọi thứ ZIP), và ZipStorer (nhỏ và nhỏ gọn). Không có liên kết, nhưng tất cả chúng đều trên codeplex và được tìm thấy qua google. Giấy phép và các tính năng chính xác khác nhau.

Mã hóa vui vẻ.

3

Đây là cách để làm điều đó một cách DotNetZip: DI xác minh cho DotNetZip vì tôi đã sử dụng nó và nó là đến nay các thư viện nén dễ dàng nhất cho C# Tôi đã đi qua :)

Kiểm tra http://dotnetzip.codeplex.com/

http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples

Tạo zip có thể tải xuống trong ASP.NET. Ví dụ này tạo ra một zip động trong một phương thức postback ASP.NET, sau đó tải xuống zipfile tới trình duyệt yêu cầu thông qua Response.OutputStream. Không có kho lưu trữ zip nào được tạo trên đĩa.

public void btnGo_Click (Object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.BufferOutput= false; // for large files 
    String ReadmeText= "This is a zip file dynamically generated at " + System.DateTime.Now.ToString("G"); 
    string filename = System.IO.Path.GetFileName(ListOfFiles.SelectedItem.Text) + ".zip"; 
    Response.ContentType = "application/zip"; 
    Response.AddHeader("content-disposition", "filename=" + filename); 

    using (ZipFile zip = new ZipFile()) 
    { 
    zip.AddFile(ListOfFiles.SelectedItem.Text, "files"); 
    zip.AddEntry("Readme.txt", "", ReadmeText); 
    zip.Save(Response.OutputStream); 
    } 
    Response.Close(); 
} 
+0

Xin chào .. Cảm ơn bạn đã trả lời Nice .. Nhưng tôi muốn biết rằng liệu tôi có thể thay đổi tên của tệp trước khi thêm vào zip (trước lệnh zip.AddFile) hay không. Tôi đang nói về các tập tin mà sẽ được thêm vào ZIP không phải là tên tập tin của tập tin zip. –

Các vấn đề liên quan