簡體   English   中英

如何在按需構建的單個zip上下載多個文件(使用c#或javascript)

[英]How to download multiple files on a single zip built on demand (using c# or javascript)

我正在努力實現一種解決方案,以一次在我的網站上一次下載多個文件。

我嘗試了一種客戶端方法,但是它不起作用,因為我要打開的文件是圖像,並且不適用於圖像(iframe解決方案)。

我看過Google的Picasa或Google+,擁有多下載解決方案將是完美的選擇:他們“按需”構建zip,這意味着瀏覽器會繼續下載文件,不知道文件的最終大小,但是一旦達到100% ,它停止了,一切正常進行。

我不知道該怎么做。 有任何想法嗎?

Tks!

根據Alexei Levenkov和OP的評論,我了解到可以開始將zip文件寫入流,而無需事先完全組裝它。 幸運的是,.NET 4.5為此目的提供了一個內置實用程序類: System.IO.Compression.ZipArchive

不幸的是,如本問題所述 ,此類與我們打算寫入的HttpResponse.OutputStream有一些不兼容之處,因為HttpResponse.OutputStream是不可搜索的,而ZipArchive要求它寫入的任何流都可以實現可搜索流的Position成員。 。

但是還是有希望的: svick發布了一個答案 ,可以診斷問題並提供解決該問題的方法。 解決方法涉及簡單地創建一個“中間”流,該流實現ZipArchive所需的成員,並將所寫入的內容轉發到另一個流(即Response.OutputStream )。


如果要創建zip文件服務器端(我認為這很容易),則可能需要查看System.IO.Compression.ZipFile類,該類提供了用於從現有文件創建檔案的靜態方法。

例如。 從服務器上的目錄創建檔案:

// In ASP.NET, getting the UNC path to the directory which will be zipped
string dirpath = Server.MapPath('~/app/foldertodownload');

// Destination path
string destpath = Server.MapPath('~/public/downloads.zip');

ZipFile.CreateFromDirectory(dirpath, destpath);

現在,您所需要做的就是使用適當的標頭將此zip文件寫入響應中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM