Our project use asp.net core 5 web API, and authenticated with JWT token,
we want to protect our image file which is binary format saved in DB,
so serve the image with an action like the following C# code,
but the action can not be accessed in html, the console in browser throw an error:
Error in browser console:
1:1 GET http://localhost:9003/api/Files/DisplayInventItemImage/LE3367/1 401 (Unauthorized)
Html code
<img src = ' api/Files/DisplayInventItemImage/LR1059/2' />
C# code
[Route("api/[controller]")]
[ApiController]
public class FilesController : ControllerBase
{
private readonly IDbService _dbService;
private readonly ILoggerService _logger;
private readonly InventTableService _inventTableService;
private readonly IWebHostEnvironment _env;
public FilesController(ILoggerService logger,
IDbService dbService,
InventTableService inventTableService,
IWebHostEnvironment env)
{
_dbService = dbService;
_logger = logger;
_inventTableService = inventTableService;
_env = env;
}
[Authorize]
[HttpGet("DisplayInventItemImage/{itemId}/{num}")]
public async Task<IActionResult> DisplayInventItemImage(string itemId, int num)
{
try
{
var table = await _inventTableService.FindAsync(itemId);
if (table == null)
return NotFound();
if (num == 1)
return File(table?.Picture1, "image/jpeg");
if (num == 2)
return File(table?.Picture2, "image/jpeg");
if (num == 3)
return File(table?.Picture3, "image/jpeg");
if (num == 4)
return File(table?.Picture4, "image/jpeg");
if (num == 5)
return File(table?.Picture5, "image/jpeg");
return Problem($"Incorrect num: {num}");
// var filePath = Path.Combine(_env.ContentRootPath, Global.StaticFiles, "images", $"{itemId}.jpeg");
// return PhysicalFile(filePath, "image/jpeg");
}
catch (Exception ex)
{
_logger.LogError(ex);
return Problem(ex.Message);
}
}
}