【发布时间】:2017-06-28 05:14:32
【问题描述】:
在this 文章中,作者提供了一种通过WebAPI 控制器上传的方法。这对我来说很有意义。
然后他建议使用 API 控制器和专用服务方法来交付 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)
};
}
}
我的问题是 - 为什么我们不能在将 blob URL 存储到数据库后直接引用它(而不是通过 Blob ID 获取)?
通过这样的控制器获取有什么好处?
【问题讨论】:
标签: azure asp.net-web-api azure-storage azure-blob-storage