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();
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