재우니의 블로그


asp.net mvc 에서 파일을 압축하여 다운로드 받는 방법을 알아보죠.


우선 참조를 통해 프레임워크에서 system.io.compression, system.io.compression, filesystem 을 설정합니다.


압축을 위한 라이브러리 입니다 자세한 설명은 아래 msdn 참고 해 주시고요.~

 

https://msdn.microsoft.com/ko-kr/library/system.io.compression(v=vs.110).aspx





화면을 개발하기 위해서 controller 를 만들어 봅니다. 이름은 FileDownloadConroller 입니다.




 

model 도 하나 만들죠. 이름은 FileDownloads 입니다.




using 문으로 System.IO 을 입력합니다.



 

이제 다시 컨트롤러로 와서,, 뷰를 만들어봅니다.




FileHome 함수에 우클릭하여 뷰추가를 합니다. 그리고 아래와 같이 확인 후  add 합니다.



뷰화면에 다운로드 경로를 렌더링 하기 위해 ActionLink 함수를 사용했습니다.




이제 다시 컨트롤러로 돌아와서, 아래와 같이 zip 다운로드 컨트롤러인 Download 함수를 구현합니다.


 

public ActionResult Download()
 {
    FileDownloads obj = new FileDownloads();
    //int CurrentFileID = Convert.ToInt32(FileID);
    var filesCol = obj.GetFile().ToList();
    using(var memoryStream = new MemoryStream())
    {
        using(var ziparchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
        {
            for (int i = 0; i < filesCol.Count; i++)
            {
                ziparchive.CreateEntryFromFile(filesCol[i].FilePath, filesCol[i].FileName);                 }
        }
        return File(memoryStream.ToArray(), "application/zip", "Attachments.zip");
    }
}


ZipArchive 함수에서 zip 파일을 만들기 위해 ZipArchiveMode.Create 사용했는데, Update 를 사용하면 읽기 및 쓰기 까지 포함합니다.





펌 : http://www.codeproject.com/Articles/1119036/Download-Multiple-Files-in-Compressed-Format-in-AS?msg=5289102