簡體   English   中英

使用DotNetZip或SharpZipLib在Classic ASP中創建Zip文件

[英]Create Zip files in Classic ASP using DotNetZip or SharpZipLib

在ASP.Net中,制作zip文件的兩種可能方法是

夏普郵編庫

點網郵編庫

如何在Classic ASP中使用其中任何一個來制作zip文件? 哪個會更好?

您不能在經典ASP中使用任何這些庫。 一種方法是嘗試使用regasm.exe實用程序將它們注冊為COM組件,盡管我不確定這些程序集是否用COMVisible屬性標記。

您將需要為所選的.NET庫創建COM包裝器

然后,您將能夠在經典ASP中引用包裝器並使用它。

與某些看法相反,從COM環境(包括ASP)使用DotNetZip很容易。

DotNetZip包括顯示從VBScript和Javascript創建zip文件的示例。 您可以輕松地修改此代碼以在ASP classic中使用它。

源代碼中還有一個示例,用於從ASP經典頁面中讀取ZIP文件。 看起來像這樣:

<%@ LANGUAGE = VBScript %>
<%  Option Explicit %>
<%

' -------------------------------------------------------
' ASP DotNetZip Example
' -------------------------------------------------------
' This example ASP page uses DotNetZip (Ionic.Zip.dll) via COM
' interop.  The page opens a zip file, then allows the user
' to download any individual file within the zip file. 
' 
'' To get this to work, you must be sure to register DotNetZip for COM
'' interop (regasm).  Also you need to be sure that IIS/ASP has the correct
'' permissions to instantiate the ZipFile object.  In my experience I Was
'' able to do this by copying Ionic.Zip.dll to the
'' c:\windows\system32\inetsrv directory, then calling "regasm /codebbase
'' Ionic.Zip.dll" from within that directory.

'' This example assumes that the ASP page is deployed into a directory,
'' that contains a subdirectory called "fodder".  Fodder must be readable,
'' and should contain one or more zip files.  This page allows the user to
'' select a zip file, then select a file within the zip file, and download
'' that file.
''

If Request.Form("Submit") = "Download" Then 
   dim pathForZipFile, fileToDownload
   pathForZipFile= Request.Form("zipFile")
   if pathForZipFile <> "" Then
     fileToDownload = Request.Form("fileToDownload")
     Response.Clear
     Response.AddHeader "Content-Disposition", "attachment; filename=" & fileToDownload  
     Response.ContentType = "application/octet-stream"  

     pathForZipFile = Server.MapPath("fodder\" & pathForZipFile)

     dim zip, ms
     set zip = Server.CreateObject("Ionic.Zip.ZipFile")
     zip.Initialize(pathForZipFile)

     set ms = Server.CreateObject("System.IO.MemoryStream")

     dim selectedEntry, entry
     For Each entry in zip
         If entry.FileName = fileToDownload  Then 
           set selectedEntry = entry 
         End If 
     Next

     selectedEntry.Extract_3(ms)
     zip.Dispose

     dim fred
     fred = ms.ToArray

     Response.BinaryWrite(fred)
     ms.Dispose
   End If

Else

%>

<html>
   <HEAD>
<TITLE>Simple DotNetZip Example</TITLE>
<style>
BODY { font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 10pt;}
TD {  font-family: Verdana, Arial, Helvetica, sans-serif;  font-size: 8pt;}
TH {  font-family: Verdana, Arial, Helvetica, sans-serif;  font-size: 10pt;}
H2 { font-size: 16pt; font-weight: bold; font-family: Verdana, Arial, Helvetica, sans-serif; color:Navy;}
H1 { font-size: 20pt; font-weight: bold; font-family: Verdana, Arial, Helvetica, sans-serif; color:Blue;}
</style>


   <script language="Javascript">

    function Download(file, zipFile)
    {
        document.form1.fileToDownload.value = file;
        document.form1.zipFile.value = zipFile;
        document.form1.submit();
    }

   </script>



   <script RUNAT=Server language="VBScript">

   '-------------------------------------
   ' This reads the given zip file. 
   '-------------------------------------
   Sub DisplayContentsOfZip
    dim pathForZipFile
    pathForZipFile= Request.Form("selectedZip")
    if pathForZipFile <> "" Then
        pathForZipFile = Server.MapPath("fodder\" & pathForZipFile)

        dim zip
        set zip = Server.CreateObject("Ionic.Zip.ZipFile")
        zip.Initialize(pathForZipFile)

        response.write "<table border=1><tr><th>Name</th><th>last modified</th></tr>"

        dim entry, fN
        For Each entry in zip
         If Right(entry.FileName,1) <> "/" Then 
             Response.Write "<tr><TD><input type='submit' name='Submit' value='Download' onClick=" & chr(34) & "Download('" & _
             entry.FileName & "', '" & Request.Form("selectedZip")  & "');" & chr(34) & " ></TD><td>" & _
             entry.FileName & "</td><td>" & entry.LastModified & "</td></tr>"
         End If
        Next
        response.write "</table>"
        zip.Dispose()
    End If
   End Sub


   '-------------------------------------
   ' This function builds and returns the 
   ' option list for the form. eg:
   '    <OPTION value="file1.zip">file1.zip</OPTION>
   '    <OPTION value="file2.zip">file2.zip</OPTION>
   '    <OPTION value="file3.zip">file3.zip</OPTION>
   '-------------------------------------
   Function FileList()
     Dim fso, folder, ext, item, result
     result = ""
     Set fso= Server.CreateObject("Scripting.FileSystemObject")
     Set folder = FSO.GetFolder(Server.MapPath("fodder"))
     For Each item In folder.Files
         ext = Right(item.Name,4)
         If (ext = ".zip") Then
           result = result & "<OPTION value='" & item.Name & "'>" & item.Name & "</OPTION>"
         End If
     Next 
     Set fso = Nothing
     Set folder = Nothing
     FileList = result
   End Function

   </script>

   </HEAD>

<body>
<h1>ASP DotNetZip</h1>

<p> This page shows how to use <a
href="http://DotNetZip.codeplex.com">DotNetZip</a> from an ASP (Classic)
page.  This page reads zip files and allows the browser to download
items from the zip files.  </p>

<form METHOD="POST" id='form1' name='form1'>

   <TABLE style="border:1; cellspacing:1; cellpadding:1;">
<TR> <TD>Select a Zip file:</TD>
  <TD><SELECT id='select1' name='selectedZip'>
    <%= fileList %>
    </SELECT>
  </TD>
</TR>
<TR> <TD/><TD><input type='submit' name="Submit" Value="Read Zip"/></TD> </TR>
   </TABLE>

   <input type="hidden" name="fileToDownload" value="">
   <input type="hidden" name="zipFile" value="">

<%
DisplayContentsOfZip
%>

</form>

</body>
</html>

<%
End If
%> 

要查看此示例的最新版本,請訪問http://dotnetzip.codeplex.com/SourceControl/list/changesets並單擊“瀏覽”,然后展開名為“示例”的目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM