En este l'auteur propose une méthode de téléchargement via un contrôleur WebAPI. Cela me semble logique.
Il recommande ensuite d'utiliser un contrôleur d'API et une méthode de service dédiée pour fournir le blob :
public async Task<HttpResponseMessage> GetBlobDownload(int blobId)
{
// IMPORTANT: This must return HttpResponseMessage instead of IHttpActionResult
try
{
var result = await _service.DownloadBlob(blobId);
if (result == null)
{
return new HttpResponseMessage(HttpStatusCode.NotFound);
}
// Reset the stream position; otherwise, download will not work
result.BlobStream.Position = 0;
// Create response message with blob stream as its content
var message = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(result.BlobStream)
};
// Set content headers
message.Content.Headers.ContentLength = result.BlobLength;
message.Content.Headers.ContentType = new MediaTypeHeaderValue(result.BlobContentType);
message.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = HttpUtility.UrlDecode(result.BlobFileName),
Size = result.BlobLength
};
return message;
}
catch (Exception ex)
{
return new HttpResponseMessage
{
StatusCode = HttpStatusCode.InternalServerError,
Content = new StringContent(ex.Message)
};
}
}
Ma question est la suivante : pourquoi ne pouvons-nous pas simplement référencer l'URL du blob directement après l'avoir stocké dans la base de données (au lieu de le récupérer via l'ID du blob) ?
Quel est l'avantage de récupérer les données à travers un contrôleur comme celui-ci ?