-
[ASP.NET Core] WebAPI 일반적인 파일다운로드 기능 구현 예제.NET/ASP.NET Core 2021. 1. 16. 13:57반응형
ASP.NET Core는 해당 포스트의 예제보다 더 간략한 방법으로 안정적인 다운로드 기능을 구현할 수 있습니다.
https://ddochea.tistory.com/134 를 참조해주세요.아래 예제는 웹서비스 내 "Download" 폴더에 저장되어있는 파일을 다운로드 받게 해주는 WebAPI 소스코드의 일부이다. 전체소스코드는 아래 링크를 찾아가자.
https://github.com/ddochea0314/DotNETExamples/tree/main/Web/File/BasicDownload
Visual Studio 로 WebAPI 프로젝트 생성 후 추가한 것은 "Download" 폴더, 다운로드할 txt 파일, "DownloadController" 소스가 전부이다.
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.IO; using System.Threading.Tasks; namespace BasicDownload.Controllers { [Route("api/[controller]")] [ApiController] public class DownloadController : ControllerBase { // GET 방식으로 다운로드를 받는다. 파일명에 특수문자가 있다면 URLEncoding을 통해 파일명을 인코딩하여 호출해야한다. // 구축환경에 IIS인 경우, URLEncoding 했음에도, + 기호와 공란이 제대로 구분 못할 수 있다. 해결방법은 사이트 참조. (https://ddochea.tistory.com/75) [HttpGet("{filename}")] public async Task<IActionResult> GetDownloadResult(string filename) { var path = Path.Join("Download", filename); if (System.IO.File.Exists(path)) { byte[] bytes; using (FileStream file = new FileStream(path: path, mode: FileMode.Open)) // 배포환경에선 다운로드폴더에 대한 권한설정작업이 필요할 수 있다. { try { bytes = new byte[file.Length]; await file.ReadAsync(bytes); return File(bytes, "application/octet-stream"); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError); } } } else { return NotFound(); } } } }
테스트때는 잘되는데 배포환경에서 다운로드가 안될 수 있다. 권한문제일 가능성이 높으므로 아래 포스트를 참조하자.
https://ddochea.tistory.com/74
실행 후 https://localhost:{포트번호}/api/Download/Test.txt 를 주소창에 입력하면 파일이 다운로드된다.
반응형'.NET > ASP.NET Core' 카테고리의 다른 글
[ASP.NET Core] 세상 간편해진 Video/Audio Streaming (0) 2021.04.21 [ASP.NET Core] 개선된 다운로드 예제(feat. ASP.NET을 쓰지 말아야할 이유 1 Stack 추가) (0) 2021.04.15 [ASP.NET Core] HTTP Cache-Control Header 를 이용한 Get 응답(Response) 캐싱 및 파일 다운로드 예제 (0) 2021.04.12 [ASP.NET Core] axios 로 Array 형식의 파라메터를 전달하는 Get 메소드 사용시 유의사항 (0) 2021.01.21 [ASP.NET Core] WebAPI 일반적인 파일업로드 기능 구현 예제 (0) 2021.01.17