Rebex



Sample: Web ZIP Archive Uploader

ASP.NET ZIP archive uploader and extractor.

Demonstrates uploading and extracting ZIP archives into a folder at the web server. Uses simple static methods of the ZipArchive object to extract the contents of a ZIP archive uploaded to the ASP.NET web page.

The following code snippet shows the core of this sample:

C#

// construct physical paths 
string targetFolder = @"c:\temp";
string archiveFileName = Path.GetFileName(FileUploadControl.PostedFile.FileName);
string archiveFilePath = Path.Combine(targetFolder, archiveFileName);

// check the uploaded file 
if (FileUploadControl.PostedFile.ContentLength <= 0)
    throw new SampleException("No data uploaded.");

// upload archive file first 
FileUploadControl.PostedFile.SaveAs(archiveFilePath);

// unzip the archive 
ArchiveOperationResult res = ZipArchive.ExtractAll(
    archiveFilePath, 
    targetFolder, 
    ArchiveActionOnExistingFile.OverwriteAll);

// display the number of extracted files 
UploadedFiles.Text = res.FilesAffected.ToString();

VB.NET

' construct physical paths 
Dim targetFolder As String = "c:\temp"
Dim fileName As String = Path.GetFileName(FileUploadControl.PostedFile.FileName)
Dim filePath As String = Path.Combine(targetFolder, fileName)

' check the uploaded file 
If FileUploadControl.PostedFile.ContentLength <= 0 Then 
    Throw New SampleException("No data uploaded.")
End If 

' upload archive file first 
FileUploadControl.PostedFile.SaveAs(filePath)

' unzip the archive 
Dim res As ArchiveOperationResult = ZipArchive.ExtractAll( _
    filePath, _
    targetFolder, _
    ArchiveActionOnExistingFile.OverwriteAll)

' display the number of extracted files 
UploadedFiles.Text = res.FilesAffected.ToString()

Note

If you need to upload larger ZIP archives, you have to increase the limit for HTTP request length using the following line in the web.config:

<system.web> 
    ...
    <!-- Allow to upload ZIP files up to 100MB with timeout up to 10 minutes --> 
    <httpRuntime maxRequestLength="102400" executionTimeout="600" /> 
    ...
</system.web>

See also: