2013-03-25 1 views
0

저는 여러 개의 mp3 파일을 zip 아카이브에 추가하고 zip 아카이브를 로컬로 다운로드해야하는 .Net 어플리케이션에서 작업하고 있습니다. mp3 파일은 다른 URL에 있습니다. 광고는 내 서버에 호스팅되거나 저장되지 않습니다. 어떤 도서관이 그런 것에 좋은가. 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

+0

그리고 URL에서 mp3 파일을 어떻게 추가 할 수 있습니까? 어떤 도움도 받으실 수 있습니다 –

+0

FTP 클래스를 살펴 보시기 바랍니다. MSDN에있는 것부터 시작해도 좋지만 MSDN 예제는 현재 텍스트 문서만을위한 것이지만 memorystream (또는 filestream)으로 업데이트하는 것은 어렵지 않습니다! – Dave

답변

1

음, 어쨌든 내가 zip 파일을 만들 먼저 zip 파일 구조를 찾기 위해 노력하는 대신 수동으로 다른 라이브러리를 사용했다, 나 또한 내 웹 사이트에 대한 건물입니다 같은 일을 이잖아. 지금까지 내가 zip 파일의 구조를 얻을에만 수 있어요 : 여기

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

을, 당신이 그렇게, zip 파일에 추가되는 첫 번째 파일의 CRC32을 가질 필요가 있음을 언급 내 편이 까다로운 부분 이잖아. 같은 내용에 대한 업데이트가 있으면 알려 주시기 바랍니다.

행운 :

+1

내 일을 끝내기 위해 IonicZip 라이브러리를 사용했습니다. –

+0

그게 좋습니다. 같은 코드를 공유 할 수 있다면 기쁠 것입니다. 며칠 전 유사한 질문을 나눴습니다. 의견을 추가 할 수 있을지도 모릅니다. [link] (http://stackoverflow.com/questions/17705512/stream-dynamic-zip-files-with-resume-support/17706525?noredirect=1#comment26424919_17706525) –