728x90
반응형
728x170
1. web.config 파일에서 아래와 같이 코드를 추가한다.
▶ web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
728x90
2. 파일 업로드를 처리하는 컨트롤러의 액션 메소드에 RequestFormLimits/RequestSizeLimit 어트리뷰트를 아래와 같이 추가한다.
▶ Controllers/TestController.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace TestProject.Controllers
{
/// <summary>
/// 테스트 컨트롤러
/// </summary>
public class TestController : Controller
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 업로드 페이지 처리하기 - Upload()
/// <summary>
/// 업로드 페이지 처리하기
/// </summary>
/// <returns>액션 결과</returns>
[HttpGet]
public IActionResult Upload()
{
return View();
}
#endregion
#region 업로드 페이지 처리하기 - Upload(environment, formFileCollection)
/// <summary>
/// 업로드 페이지 처리하기
/// </summary>
/// <param name="environment">웹 호스트 환경</param>
/// <param name="formFile">폼 파일</param>
/// <returns>액션 결과</returns>
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 209715200)]
[RequestSizeLimit(209715200)]
public IActionResult Upload([FromServices]IWebHostEnvironment environment, ICollection<IFormFile> formFileCollection)
{
string uploadDirectoryPath = Path.Combine(environment.WebRootPath, "upload");
long totalSize = 0L;
foreach(IFormFile formFile in formFileCollection)
{
string uploadFilePath = Path.Combine(uploadDirectoryPath, formFile.FileName);
using(FileStream fileStream = System.IO.File.Create(uploadFilePath))
{
formFile.CopyTo(fileStream);
fileStream.Flush();
}
totalSize += formFile.Length;
}
if(formFileCollection.Count == 1)
{
IFormFile formFile = formFileCollection.First();
ViewData["message"] = $"{formFile.FileName} 파일이 업로드되었습니다 : {formFile.Length:#,##0} 바이트";
}
else
{
ViewData["message"] = $"{formFileCollection.Count:#,##0}개 파일이 업로드되었습니다 : {totalSize:#,##0} 바이트";
}
return View();
}
#endregion
}
}
300x250
3. 2번에서 RequestSizeLimit 어트리뷰트를 설정하는 대신 startup.cs 파일에서 아래와 같이 코드를 추가할 수 있다.
▶ Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace TestProject
{
/// <summary>
/// 시작
/// </summary>
public class Startup
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 구성 - Configuration
/// <summary>
/// 구성
/// </summary>
public IConfiguration Configuration { get; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - Startup(configuration)
/// <summary>
/// 생성자
/// </summary>
/// <param name="configuration">구성</param>
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 서비스 컬렉션 구성하기 - ConfigureServices(services)
/// <summary>
/// 서비스 컬렉션 구성하기
/// </summary>
/// <param name="services">서비스 컬렉션</param>
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.Configure<IISServerOptions>(option => { option.MaxRequestBodySize = 209715200L; });
}
#endregion
#region 구성하기 - Configure(app, environment)
/// <summary>
/// 구성하기
/// </summary>
/// <param name="app">애플리케이션 빌더</param>
/// <param name="environment">웹 호스트 환경</param>
public void Configure(IApplicationBuilder app, IWebHostEnvironment environment)
{
if(environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints
(
endpoints =>
{
endpoints.MapControllerRoute
(
name : "default",
pattern : "{controller=Home}/{action=Index}/{id?}"
);
}
);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > ASP.NET MVC' 카테고리의 다른 글
[C#/ASP.NET MVC] ASP.NET CORE MVC 게시판 만들기 (0) | 2020.10.16 |
---|---|
[C#/ASP.NET MVC] 누겟 설치 : Microsoft.Extensions.Caching.Memory (0) | 2020.10.14 |
[C#/ASP.NET MVC] 누겟 설치 : Microsoft.AspNetCore.Session (0) | 2020.10.14 |
[C#/ASP.NET MVC] Kestrel 사용시 업로드 파일 크기 설정하기 (2) (0) | 2020.10.14 |
[C#/ASP.NET MVC] Kestrel 사용시 업로드 파일 크기 설정하기 (1) (0) | 2020.10.14 |
[C#/ASP.NET MVC] IIS Express 사용시 업로드 파일 크기 설정하기 (0) | 2020.10.14 |
[C#/ASP.NET MVC] 파일 업로드 액션 메소드에서 파일 정보를 전달받는 매개 변수의 데이터 타입 설정하기 (0) | 2020.10.14 |
[C#/ASP.NET MVC] JWT(Json Web Token) 인증 사용하기 (0) | 2020.10.13 |
[C#/ASP.NET MVC] 쿠키(Cookie) 인증 사용하기 (0) | 2020.10.12 |
[C#/ASP.NET MVC] 누겟 설치 : Microsoft.AspNetCore.Authentication.Cookies (0) | 2020.10.11 |
[C#/ASP.NET MVC] RequestFormLimitsAttribute 클래스 : 폼에서 특정 제한 설정하기 (0) | 2020.10.11 |
댓글을 달아 주세요