我有一個下載頁面,有3個下載選項:Word,Zip和PDF。有一個文件夾包含.doc
文件。當用戶單擊頁面上的Zip選項時,我希望ASP.NET將帶有.doc
文件的文件夾壓縮到臨時.zip
文件中。然後客戶端將從服務器下載它。當用戶的下載完成時,臨時Zip文件應該自行刪除。如何生成臨時Zip文件,然後在下載後自動刪除它?
如何使用ASP.NET 2.0 C#做到這一點?
注意:我知道如何使用C#ASP.NET 2.0壓縮和解壓縮文件並從系統中刪除文件。
我有一個下載頁面,有3個下載選項:Word,Zip和PDF。有一個文件夾包含.doc
文件。當用戶單擊頁面上的Zip選項時,我希望ASP.NET將帶有.doc
文件的文件夾壓縮到臨時.zip
文件中。然後客戶端將從服務器下載它。當用戶的下載完成時,臨時Zip文件應該自行刪除。如何生成臨時Zip文件,然後在下載後自動刪除它?
如何使用ASP.NET 2.0 C#做到這一點?
注意:我知道如何使用C#ASP.NET 2.0壓縮和解壓縮文件並從系統中刪除文件。
我加入這個到流碼的一端固定我的問題:
Response.Flush();
Response.Close();
if(File.Exist(tempFile))
{File.Delete(tempFile)};
您需要手動將zip文件流式傳輸到用戶,然後在流式傳輸完成後刪除文件。
try
{
Response.WriteFile("path to .zip");
}
finally
{
File.Delete("path to .zip");
}
使用DotNetZip你可以直接將zip文件保存到Response.OutputStream。不需要臨時的Zip文件。
Response.Clear();
// no buffering - allows large zip files to download as they are zipped
Response.BufferOutput = false;
String ReadmeText= "Dynamic content for a readme file...\n" +
DateTime.Now.ToString("G");
string archiveName= String.Format("archive-{0}.zip",
DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "attachment; filename=" + archiveName);
using (ZipFile zip = new ZipFile())
{
// add a file entry into the zip, using content from a string
zip.AddFileFromString("Readme.txt", "", ReadmeText);
// add the set of files to the zip
zip.AddFiles(filesToInclude, "files");
// compress and write the output to OutputStream
zip.Save(Response.OutputStream);
}
Response.Flush();
你能告訴你使用ZipFile()方法的哪個dll嗎? – Siddiqui 2011-10-10 07:37:12
表格下載從數據庫,ZIP和Complate下載使用ICSharpCode.SharpZipLib.Zip
if (ds.Tables[0].Rows.Count > 0)
{
// Create the ZIP file that will be downloaded. Need to name the file something unique ...
string strNow = String.Format("{0:MMM-dd-yyyy_hh-mm-ss}", System.DateTime.Now);
ZipOutputStream zipOS = new ZipOutputStream(File.Create(Server.MapPath("~/TempFile/") + strNow + ".zip"));
zipOS.SetLevel(5); // ranges 0 to 9 ... 0 = no compression : 9 = max compression
// Loop through the dataset to fill the zip file
foreach (DataRow dr in ds.Tables[0].Rows)
{
byte[] files = (byte[])(dr["Files"]);
//FileStream strim = new FileStream(Server.MapPath("~/TempFile/" + dr["FileName"]), FileMode.Create);
//strim.Write(files, 0, files.Length);
//strim.Close();
//strim.Dispose();
ZipEntry zipEntry = new ZipEntry(dr["FileName"].ToString());
zipOS.PutNextEntry(zipEntry);
zipOS.Write(files, 0, files.Length);
}
zipOS.Finish();
zipOS.Close();
FileInfo file = new FileInfo(Server.MapPath("~/TempFile/") + strNow + ".zip");
if (file.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/zip";
Response.WriteFile(file.FullName);
Response.Flush();
file.Delete();
Response.End();
}
}
刪除 對於使用此代碼在需要時類中的Response.Write行動客戶端發送請求2 POST和GET到服務器。在第一次行動它的進入嘗試塊bla bla bla比輸入finally塊和刪除文件..並再次發生火災事件,並嘗試下載文件,但有tempziP文件cuz它的第一個請求中刪除... SOO我該如何解決這個問題? – 2009-05-28 21:37:51