星期六, 6月 13, 2020

[WebApi] 下載圖片

透過 WebApi 來傳輸圖檔

WebApi Code
namespace ImageDemo.Controllers
{
    public class ImageController : ApiController
    {
        [HttpGet]
        [Route("api/image")]
        public IHttpActionResult Get(string file)
        {
            #region 取得server的相對路徑

            // 指定 IIS 所在 Server 的資料夾位置
            string sourceDir = $"D:/WebAPIDemoPhoto";
            if (Directory.Exists(sourceDir) == false)
            {
                return BadRequest("資料夾不存在");
            }

            // 限定 jpg 檔案
            var fileFullName = Directory.GetFiles(sourceDir, "*.jpg")
                .FirstOrDefault(f => Path.GetFileNameWithoutExtension(f) == file);
            if (fileFullName == null)
            {
                return BadRequest("檔案不存在");
            }

            #endregion

            // jpg 圖檔為 image/jpeg
            var mimeType = MimeMapping.GetMimeMapping(fileFullName);

            var response = new HttpResponseMessage(HttpStatusCode.OK);
            var fileStream = new FileStream(fileFullName, FileMode.Open, FileAccess.Read);
            response.Content = new StreamContent(fileStream);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue(mimeType);
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = HttpUtility.UrlPathEncode(file)
            };
            // 告知瀏覽器下載長度
            response.Content.Headers.ContentLength = fileStream.Length;

            return ResponseMessage(response);
        }
    }
}
部屬至本機 IIS 上後,利用 Postman 來打看看

Header 資訊

[WebApi] 下載圖片-1

沒想到 Postman 內可以顯示該圖片

[WebApi] 下載圖片-2

沒有留言:

張貼留言