iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
1
自我挑戰組

後端或是ASP.NET Core的學習筆記系列 第 29

第29天:檔案下載

目前我們完成檔案上傳的功能,接下來就要進行檔案下載

寫一個專門下載檔案的Action,接受ID參數,去資料庫看目錄中有沒有這個檔案,有的話就去檔案存放資料夾將檔案傳給Client。

   public async Task<IActionResult> Get(Guid id)
    {
        var fileData = _context.File.Find(id.ToString());
        if (fileData == null)
        {
            return NotFound();
        }

        var path = $"data/{fileData.Name}";
        var memoryStream = new MemoryStream();
        await using (var stream = new FileStream(path, FileMode.Open))
        {
            await stream.CopyToAsync(memoryStream);
        }
        memoryStream.Seek(0, SeekOrigin.Begin);

        var contentTypes = new Dictionary<string, string>
        {
            {".png", "image/png"},
            {".jpg", "image/jpeg"},
            {".jpeg", "image/jpeg"},
            {".gif", "image/gif"}
        };

        // 要跟前端說要下載檔案的類型
        return new FileStreamResult(
            memoryStream,contentTypes[Path.GetExtension(path).ToLowerInvariant()]);

}

參考資料


上一篇
第28天:自訂(拆成)自己的Helper輔助功能-FileHelper
下一篇
第30天:終於撐到完賽QQ-後端或是ASP.NET Core的學習筆記
系列文
後端或是ASP.NET Core的學習筆記30

尚未有邦友留言

立即登入留言