[英]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.