私はいくつかのファイルを追加したい既存のZIPファイル(いくつかのファイル)を持っています。asp.netファイルを解凍してユーザーにアップロードする方法
ユーザーがダウンロードボタンをクリックすると、このZIPをちょっと変更してブラウザへのダウンロードを開始する必要があります。 (そこもちろん一度に複数のユーザーであることができ、かつそれぞれ1つの必要性は少し異なったzipファイルを受信する。)
zipファイルに
私はいくつかのファイルを追加したい既存のZIPファイル(いくつかのファイル)を持っています。asp.netファイルを解凍してユーザーにアップロードする方法
ユーザーがダウンロードボタンをクリックすると、このZIPをちょっと変更してブラウザへのダウンロードを開始する必要があります。 (そこもちろん一度に複数のユーザーであることができ、かつそれぞれ1つの必要性は少し異なったzipファイルを受信する。)
zipファイルに
ルックを変更するasp.netでの機能/ライブラリのこの種がありますこのときthread:
GZIPフォーマットは、文書化された標準フォーマットです。複数のファイルを1つのアーカイブに入れることをサポートしていますが、ほとんどのGZIPツールでは1つのファイルしか含まれていない圧縮ファイル(.gz)が生成されます。通常、ルートファイル名は同じであるため、Datafile.csvを圧縮すると、Datafile.csv.gzというファイルが作成されます。
GZIP形式は、.zip形式と同じではありません。 GZipStreamクラスはGZIP形式のファイルを読み書きできますが、クラスは.zipファイルを生成または読み込みません。このクラスのドキュメントでは次のことが明確に記載されています:
このクラスは、または.zipアーカイブからファイルを抽出する。
GZipStreamの助けを借りて、余分なコードを使ってzipファイルを生成したり読むことは可能ですが、それは簡単なことではありません。
Zipファイルを読み書きする場合は、DotNetZipなどのサードパーティライブラリを使用するのが最善の方法です。このライブラリは無料であり、複数の圧縮ファイルを含むzipファイルをアプリケーションが読み書きできるようにします。これらはWindowsエクスプローラ、WinZip、または他のzipツールで開くことができる標準のzipファイルです。使い方は簡単です。ダウンロードの問題については
Response.Clear();
String ReadmeText= "README.TXT\n\nHello!\n\nThis is a zip file that was dynamically generated.";
string archiveName= String.Format("archive-{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "filename=" + archiveName);
using (ZipFile zip = new ZipFile())
{
// add a named entry to the zip file, using a string for content
zip.AddFileFromString("Readme.txt", "", ReadmeText);
if (!String.IsNullOrEmpty(tbPassword.Text))
{
zip.Password = tbPassword.Text;
if (chkUseAes.Checked)
zip.Encryption = EncryptionAlgorithm.WinZipAes256;
}
// add a bunch of plain files, into the "files" directory
foreach (var f in filesToInclude)
{
zip.AddFile(f, "files");
}
zip.Save(Response.OutputStream);
}
Response.End();
:
私はあなたが(AJAXの場合)iframe内に移入しまうのダウンロードページにこのコードを掲載しました。ストリームコードは、AJAXを使用しない場合にのみ使用できます。もちろん
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Sql
Imports System.Net
Imports system.io
Partial Class DownloadFile
Inherits System.Web.UI.Page
Protected Sub page_load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Dim url As String = Request.QueryString("DownloadUrl")
If url Is Nothing Or url.Length = 0 Then Exit Sub
'Initialize the input stream
Dim req As HttpWebRequest = WebRequest.Create(url)
Dim resp As HttpWebResponse = req.GetResponse()
Dim bufferSize As Integer = 1
'Initialize the output stream
Response.Clear()
Response.AppendHeader("Content-Disposition:", "attachment; filename=download.zip")
Response.AppendHeader("Content-Length", resp.ContentLength.ToString)
Response.ContentType = "application/download"
'Populate the output stream
Dim ByteBuffer As Byte() = New Byte(bufferSize) {}
Dim ms As MemoryStream = New MemoryStream(ByteBuffer, True)
Dim rs As Stream = req.GetResponse.GetResponseStream()
Dim bytes() As Byte = New Byte(bufferSize) {}
While rs.Read(ByteBuffer, 0, ByteBuffer.Length) > 0
Response.BinaryWrite(ms.ToArray())
Response.Flush()
End While
'Cleanup
Response.End()
ms.Close()
ms.Dispose()
rs.Dispose()
ByteBuffer = Nothing
End Sub
End Class
zipファイルがパブリックアクセス権を持っている場合、あなたは単に<のhref ... & GT>を行うことができます。
.NET 3.5を使用している場合は、ファイルをzipアーカイブに追加/削除することができます。 .NET 2.0を使用している場合は、SharpZipLibなどのライブラリを使用する必要があります。
dotnetzipを使用したコード例も同様ですか?既存のzipファイルにファイルを追加するために使用できますか? – Tom
私はそれについてはわかりませんが、これはかなり一般的なシナリオだと思うし、可能でなければならないと思います。 –