첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestProject.zip
다운로드

Upload.cshtml 파일에서 파일 업로드를 위해 form 태그 내에서 input 태그의 name과 multiple 속성을 아래와 같이 설정하면

 

▶ Views/Test/Upload.cshtml

@{ Layout = null; }
<p>파일 업로드 크기 설정하기</p>
<hr />
<p>@ViewData["message"]</p>
<form asp-controller="Test" asp-action="Upload" method="post" enctype="multipart/form-data">
    <input type="file" name="formFileCollection" multiple />
    <br />
    <br />
    <button type="submit">업로드</button>
</form>

 

파일 업로드를 처리하는 컨트롤러의 액션 메소드에서 파일 정보를 전달받는 매개 변수의 데이터 타입은 Upload.cshtml 파일에서 form 태그의 multiple 속성 지정 여부를 떠나서 항상 ICollection<IFormFile> 타입으로 아래와 같이 설정한다.

 

728x90

 

▶ 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]
        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
    }
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker

댓글을 달아 주세요