2009-08-13 3 views
1

파일이 몇 개 더있는 기존 ZIP 파일이 있습니다.asp.net 파일을 압축하여 사용자에게 업로드하는 방법

사용자가 다운로드 버튼을 클릭하면이 ZIP을 약간 수정해야하며 브라우저로 다운로드해야합니다. (이 물론 한 번에 여러 사용자가 될 수 있으며, 각각 필요는 조금 다른 zip 파일을받을 수 있습니다.)

zip 파일을

답변

3

봐를 수정하는 asp.net의 기능/라이브러리의이 종류가 있나요 at이 thread :

GZIP 형식은 문서화 된 표준 형식입니다. 하나의 아카이브에 여러 개의 파일을 저장하는 기능을 지원하지만 대부분의 GZIP 도구는 하나의 파일 만 포함하는 압축 파일 (.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(); 
+0

그래서 dotnetzip을 사용하는 예제 코드가 있습니까? 기존 zip 파일에 파일을 추가하는 데 사용할 수 있습니까? – Tom

+0

나는 그것에 대해 잘 모르겠다. 그러나 이것은 꽤 일반적인 시나리오라고 생각하며 가능해야한다. –

0

는 :

나는 (AJAX의 경우) 당신은 iframe에 채우는 것 다운로드 페이지에이 코드를 기록했다. AJAX를 사용하지 않는 경우에만 스트림 코드를 사용할 수 있습니다. zip 파일이 공용 액세스가있는 경우

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 

은 물론, 당신은 단순히>은 < A HREF ... &있다 할 수 있습니다.

0

.NET 3.5를 사용하는 경우 zip 아카이브에 파일을 추가/제거 할 수 있어야합니다. .NET 2.0을 사용하는 경우 SharpZipLib과 같은 라이브러리를 사용해야합니다.

관련 문제