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

728x90
반응형
728x170

TestProject.zip
다운로드

▶ Controllers/TestController.cs

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>
    [ApiController]
    [Route("api/[controller]")]
    public class TestController : Controller
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 값 리스트 구하기 - GetValueList() // GET api/test

        /// <summary>
        /// 값 리스트 구하기
        /// </summary>
        /// <returns>값 리스트</returns>
        [HttpGet]
        public List<string> GetValueList()
        {
            return new List<string> { "value1", "value2" };
        }

        #endregion
        #region 파일 다운로드 하기 - DownloadFile() // GET api/test/download

        /// <summary>
        /// 파일 다운로드 하기
        /// </summary>
        /// <returns>태스크</returns>
        [HttpGet]
        [Route("download")]
        public async Task DownloadFile()
        {
            string filePath = @"d:\The Best of New Age Music Collection.mp4";

            Response.Headers.Add(HeaderNames.ContentType       , "application/octet-stream");
            Response.Headers.Add(HeaderNames.ContentDisposition, $"attachment; filename=\"{Path.GetFileName(filePath)}\"" );

            Response.StatusCode = 200;

            Stream sourceStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            Stream targetStream = Response.Body;

            int bufferSize = 1024;

            byte[] bufferByteArray = new byte[bufferSize];

            while(true)
            {
                int readCount = await sourceStream.ReadAsync(bufferByteArray, 0, bufferSize);

                if(readCount == 0)
                {
                    break;
                }

                await targetStream.WriteAsync(bufferByteArray, 0, readCount);
            }

            await targetStream.FlushAsync();
        }

        #endregion
    }
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker

댓글을 달아 주세요