2013-03-25 45 views
0

我正在开发.Net应用程序,我需要将多个mp3文件添加到zip压缩文件并在本地下载zip压缩文件。 mp3文件位于不同的网址上,广告没有托管或存储在我的服务器上。哪个图书馆适合这样的事情。我尝试使用SharpLipZip,但失败了。这是我目前正在尝试使用sharpziplib的代码。所有的代码被执行,但浏览器不下载。从asp.Net中以zip压缩文件的形式从不同的url下载多个Mp3文件

string[] fileURLs = new string[] { "http://www.musicimpressions.com/demos_mp3g/d_RE41843.mp3", "http://media.archambault.ca/sample/6/2/B/0/62B0CC2D91D4357D6477845E967AF9BA/00000000000000027923-256K_44S_2C_cbr1x_clipped.mp3" }; 

Response.AddHeader("Content-Disposition", "attachment; filename=CallRecordings.zip"); 
Response.ContentType = "application/x-zip-compressed"; 

ZipOutputStream zipStream = new ZipOutputStream(Response.OutputStream); 
zipStream.SetLevel(3); 
byte[] buffer = new byte[10485760]; 
foreach (string url in fileURLs) 
{ 
    Stream fileStream = null; 

    HttpWebRequest fileReq = (HttpWebRequest)HttpWebRequest.Create(url); 

    HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse(); 

    if (fileReq.ContentLength > 0) 
     fileResp.ContentLength = fileReq.ContentLength; 

    //Get the Stream returned from the response 
    fileStream = fileResp.GetResponseStream(); 
    byte[] fileBytes = ReadStream(fileStream); 

    ZipEntry fileEntry = new ZipEntry(ZipEntry.CleanName(url)); 
    fileEntry.Size = fileBytes.Length;   

    zipStream.PutNextEntry(fileEntry); 

    zipStream.Write(fileBytes, 0, fileBytes.Length); 
    Response.Flush(); 
    fileStream.Close(); 
} 

zipStream.Finish(); 
zipStream.Flush(); 
zipStream.Close(); 
Response.Flush(); 
Response.End(); 

ReadStream的定义如下。

public static byte[] ReadStream(Stream input) 
{ 
    byte[] buffer = new byte[16 * 1024]; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     int read; 
     while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      ms.Write(buffer, 0, read); 
     } 
     return ms.ToArray(); 
    } 
} 
+0

.NET 4.5自带[ZipArchive类(http://msdn.microsoft.com/en-gb/library/system.io.compression.ziparchive.aspx) – Dave 2013-03-25 13:49:38

+0

以及如何从网址添加mp3文件...任何帮助将不胜感激 – 2013-03-25 13:51:39

+0

我建议你看一下FTP类。 MSDN上的那个为您提供了一个很好的开始,但请记住,MSDN示例目前仅用于文本文档,但将其更新为内存流(或文件流)并不困难! – Dave 2013-03-25 13:55:56

回答

1

好吧,那我为此建立了自己的网站同样的事情,无论如何,我试图寻找zip文件结构首先创建zip文件手动,而不是使用任何其他库。到现在为止,我只能够得到的zip文件的结构:

https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html

这里,提到你需要有该文件第一它被附加到zip文件的CRC32,所以那是我身边棘手的部分。一旦你获得了相同的更新,让我知道。

好运 :)

+1

我用IonicZip库来完成我的工作 – 2013-08-07 07:09:59

+0

这很棒。如果你能分享你的代码,我会很高兴。我前几天还分享了类似的问题,可能是你可以在它上面添加一些评论。 [链接](http://stackoverflow.com/questions/17705512/stream-dynamic-zip-files-with-resume-support/17706525?noredirect=1#comment26424919_17706525) – 2013-08-07 17:57:41

相关问题