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,
    TransferMethod.Copy,
    ActionOnExistingFiles.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, _
    TransferMethod.Copy, _
    ActionOnExistingFiles.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 100 MB with timeout up to 10 minutes -->
    <httpRuntime maxRequestLength="102400" executionTimeout="600" />
    ...
  </system.web>