클리엘
CLIEL LAB
클리엘
전체 방문자
오늘
어제
  • 분류 전체보기 (514) N
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (301) N
      • C# (84) N
      • ASP.NET (67)
      • Windows API for .NET (128)
    • Server (53)
      • SQL Server (10)
      • MariaDB (18)
      • Windows Server (6)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

태그

  • LINQ
  • android studio
  • CSS3
  • jQuery
  • c#
  • asp.net core
  • 변수
  • ASP.NET
  • Windows API
  • asp.net core web api
  • Kotlin
  • NestJS
  • JavaScript
  • android
  • node.js
  • Entity Framework
  • HTML5
  • MariaDB
  • exception
  • .NET

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

[ASP.NET Core Web API] 파일업로드(FileUpload)
.NET/ASP.NET

[ASP.NET Core Web API] 파일업로드(FileUpload)

2021. 3. 23. 16:55
728x90

파일 업로드 API가 들어갈 컨트롤러가 Home이라는 가정하에 다음과 같이 생성자를 추가합니다.

private readonly IWebHostEnvironment _environment;

public HomeController(IWebHostEnvironment enviroment)
{
    _environment = enviroment;
}

IWebHostEnvironment 인터페이스로부터 받는 WebHostEnvironment 객체는 현재 root 폴더의 경로를 알 수 있도록 하며 이를 기준으로 업로드할 폴더를 찾아들어갈 것입니다.

 

주의할 점은 ASP.NET Core로 순수 Web API 프로젝트를 만들게 되면 wwwroot폴더는 프로젝트에 포함되지 않을 수 있는데 이런 경우 생성자로부터 받는 environment변수는 null이 됩니다. 따라서 프로젝트에 wwwroot폴더를 생성하거나 혹은 null인 경우 Directory.GetCurrentDirectory()와 같은 것으로 대체할 수 있는 방안을 마련해야 합니다.

 

이제 HomeController에 파일을 받을 수 있는 메서드를 생성합니다.

[HttpPost]
public async Task<IActionResult> Post(List<IFormFile> files)
{
    var uploadFolder = Path.Combine(_environment.WebRootPath, "files");

    foreach (var file in files)
    {
        if (file.Length > 0)
        {
            var fileName = Path.GetFileName(ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'));

            using (var fileStream = new FileStream(Path.Combine(uploadFolder, fileName), FileMode.Create))
            {
                await file.CopyToAsync(fileStream);
            }
        }
    }

    return Ok(new { message = "OK" });
}

파일이 업로드될 위치는 wwwroot안에 있는 files폴더라고 가정합니다. PostMan을 사용하여 위 메서드를 테스트해 봅니다.

 

ASP.NET Core의 기본 파일업로드 용량은 28MB정도로 알려져 있는데 만약 업로드가능한 용량을 늘리려 한다면 해당 API메서드에 다음과 같은 특성을 부여합니다.

[RequestFormLimits(MultipartBodyLengthLimit = 314_572_800)]
[RequestSizeLimit(314_572_800)]
public IActionResult Post(List<IFormFile> files)

서버에서도 대용량파일의 요청을 받아들일 수 있도록 설정해야 합니다. 만약 IIS라면 다음과 같이 web.config에서 요청가능한 최대용량을 설정할 수 있습니다.

 

참고로 예제로 설정된 용량은 300MB(300 * 1024 * 1024)입니다.

728x90
저작자표시 비영리 변경금지

'.NET > ASP.NET' 카테고리의 다른 글

[ASP.NET Core Web API] 프로젝트및 Controller 생성  (0) 2021.03.25
[ASP.NET Core Web API] Swagger와 API 명세  (0) 2021.03.25
[ASP.NET Core Web API] DI (Dependency Injection) 구현 (Autofac)  (0) 2021.03.23
[ASP.NET Core Web API] JWT 인증  (8) 2021.03.23
[.NET Core] DB로 부터 Model 생성하기 (MySQL/MariaDB)  (0) 2021.03.21
    '.NET/ASP.NET' 카테고리의 다른 글
    • [ASP.NET Core Web API] 프로젝트및 Controller 생성
    • [ASP.NET Core Web API] Swagger와 API 명세
    • [ASP.NET Core Web API] DI (Dependency Injection) 구현 (Autofac)
    • [ASP.NET Core Web API] JWT 인증
    클리엘
    클리엘
    누구냐 넌?

    티스토리툴바