Мне нужно, чтобы файл, например, c:\users\user\documents\screenshot.png
был доступен из сети и имел свой url: content.efolio.com/p/123/screenshot.png
.
На данный момент я сохраняю путь к файлу в таблице базы данных. Когда приходит запрос, файл преобразуется в строку Base64 и отправляется внутри JSON.
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public string PhotoEncoded { get; set; }
public string Description { get; set; }
public void AddPhoto(byte[] content, string fileFormat)
{
PhotoEncoded = string.Format("data:image/{0};base64,{1}",
fileFormat.Substring(1,fileFormat.Length-1),
Convert.ToBase64String(content)
);
}
}
Но я хочу отправить только URL. Проблема в том, что я не знаю, как сделать файл доступным через URL. Как мне это сделать в ASP.NET Core?
Я наконец-то понял! Вам просто нужно создать ContentController
, который будет обслуживать отдельные файлы, и использовать метод File()
в ControllerBase
:
[ApiController]
[Route("[controller]")]
public class ContentController : ControllerBase
{
[HttpGet("project/{id}/{fileName}")]
public async Task<IActionResult> GetProjectThumbnail(int id, string fileName)
{
try
{
return File(await _projects.GetThumbnailAsync(id, fileName), "image/jpeg");
}
catch (Exception ex)
{
return StatusCode((int)HttpStatusCode.InternalServerError, new ErrorResponse(ex));
}
}
//...
}
После этого я могу получить доступ к миниатюре через URL: https://efolio.com/content/project/1003/1.jpg