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

728x90
반응형
728x170

TestProject.zip
다운로드

▶ Controllers/TestController.cs

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace TestProject.Controllers
{
    /// <summary>
    /// 테스트 컨트롤러
    /// </summary>
    public class TestController : Controller
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 웹 호스트 환경
        /// </summary>
        private IWebHostEnvironment environment;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - TestController(environment)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="environment">웹 호스트 환경</param>
        public TestController(IWebHostEnvironment environment)
        {
            this.environment = environment;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 업로드 페이지 처리하기 - Upload()

        /// <summary>
        /// 업로드 페이지 처리하기
        /// </summary>
        [HttpGet]
        public IActionResult Upload()
        {
            return View();
        }

        #endregion
        #region 업로드 페이지 처리하기 - Upload(fileCollection)

        /// <summary>
        /// 업로드 페이지 처리하기
        /// </summary>
        /// <param name="fileCollection">파일 컬렉션</param>
        /// <returns>액션 결과 태스크</returns>
        [HttpPost]
        public async Task<IActionResult> Upload(ICollection<IFormFile> fileCollection)
        {
            var uploadDirectoryPath = Path.Combine(this.environment.WebRootPath, "upload");

            foreach(IFormFile formFile in fileCollection)
            {
                if(formFile.Length > 0)
                {
                    string fileName = Path.GetFileName
                    (
                        ContentDispositionHeaderValue.Parse(formFile.ContentDisposition).FileName.Value
                    );

                    using(FileStream stream = new FileStream(Path.Combine(uploadDirectoryPath, fileName), FileMode.Create))
                    {
                        await formFile.CopyToAsync(stream);
                    }
                }
            }

            return View();
        }

        #endregion
        #region 다운로드 페이지 처리하기 - Download(fileName)

        /// <summary>
        /// 다운로드 페이지 처리하기
        /// </summary>
        public FileResult Download(string fileName = "Test.txt")
        {
            byte[] fileByteArray = System.IO.File.ReadAllBytes
            (
                Path.Combine(this.environment.WebRootPath, "upload", fileName)
            );

            return File(fileByteArray, "application/octet-stream", fileName);
        }

        #endregion
    }
}

 

728x90

 

▶ Views/Test/Upload.cshtml

@{
    Layout = null;
}
<p>파일 업로드/다운로드하기</p>
<hr />
<form asp-controller="Test" asp-action="Upload"
    method="post"
    enctype="multipart/form-data">
    <p><input type="file" name="fileCollection" multiple /></p>
    <p><input type="submit" value="업로드" /></p>
</form>

 

300x250

 

※ wwwroot 폴더에서 upload 폴더를 생성한다.

※ 파일 다운로드 URL은 아래를 참조한다.

https://localhost:44306/Test/Download?FileName=sample.png

※ sample.png : 다운로드할 파일명

728x90
반응형
그리드형

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

[.NETCORE/ASP.NET MVC] IViewComponentHelper 인터페이스 : InvokeAsync 메소드를 사용해 뷰 컴포넌트의 특정 뷰 호출하기  (0) 2020.10.09
[.NETCORE/ASP.NET MVC] ViewComponent 클래스 : 데이터를 표시하는 뷰 컴포넌트 만들기  (0) 2020.10.09
[.NETCORE/ASP.NET MVC] ViewComponent 클래스 : 저작권을 표시하는 뷰 컴포넌트 만들기  (0) 2020.10.09
[.NETCORE/ASP.NET MVC] JsonConfigurationExtensions 클래스 : AddJsonFile 확장 메소드를 사용해 환경 설정 파일 로드하기  (0) 2020.10.08
[.NETCORE/ASP.NET MVC] LoggerExtensions 클래스 : LogInformation 확장 메소드를 사용해 로그 기록하기  (0) 2020.10.08
[.NETCORE/ASP.NET MVC] 파일 업로드/다운로드하기  (0) 2020.10.08
[.NETCORE/ASP.NET MVC] ServiceCollectionServiceExtensions 클래스 : AddSingleton 확장 메소드를 사용해 싱글톤 객체 의존성 주입 사용하기  (0) 2020.10.08
[.NETCORE/ASP.NET MVC] <cache> 태그 : 캐시 기능 사용하기  (0) 2020.10.07
[.NETCORE/ASP.NET MVC] TagHelper 클래스 : 게시판 페이지 번호 목록을 생성하는 사용자 정의 태그 헬퍼 만들기  (0) 2020.10.07
[.NETCORE/ASP.NET MVC] TagHelper 클래스 : 유닉스 시간을 현재 시간으로 변환하는 사용자 정의 태그 헬퍼 만들기  (0) 2020.10.07
[.NETCORE/ASP.NET MVC] TagHelper 클래스 : 메일 주소 링크를 생성하는 사용자 정의 태그 헬퍼 만들기  (0) 2020.10.07
Posted by 사용자 icodebroker

댓글을 달아 주세요