使用 MemoryStream 和 WebApi 返回图像
Returning an image with MemoryStream and WebApi
我正在尝试使端点 return 成为包含图像的 MemoryStream。
这是我目前的代码:
控制器端点:
[Route("v1/consumer/profile-image")]
[HttpGet]
public async Task<HttpResponseMessage> GetProfileImage(string id)
{
var result = await ImageService.GetImage(true, id);
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(result.BlobStream)
};
response.Content.Headers.ContentType = new MediaTypeHeaderValue(result.ContentType);
return response;
}
服务方式:
public async Task<ImageStream> GetImage(string profileId)
{
var imageStream = new MemoryStream();
var account = CloudStorageAccount.Parse(ConnectionString);
var client = account.CreateCloudBlobClient();
CloudBlobContainer container;
CloudBlockBlob blob = null;
container = client.GetContainerReference(ConsumerImageContainer);
blob = container.GetBlockBlobReference(profileId);
blob.FetchAttributes();
blob.DownloadToStream(imageStream);
return new ImageStream
{
BlobStream = imageStream,
ContentType = blob.Properties.ContentType
};
}
public class ImageStream
{
public MemoryStream BlobStream { get; set; }
public string ContentType { get; set; }
}
我的问题是我似乎没有取回任何内容 - 我可以看到内容类型设置正确,但图像没有设置:
Request Headers
Request URL: https://localhost:44347/v1/consumer/profile-image
Request Method: GET
Status Code: 200
Remote Address: [::1]:44347
Referrer Policy: no-referrer-when-downgrade
Response Headers
access-control-allow-origin: *
content-length: 0
content-type: image/jpeg
date: Mon, 09 Jul 2018 13:38:58 GMT
server: Microsoft-IIS/10.0
status: 200
x-powered-by: ASP.NET
x-sourcefiles: =?UTF-8?B?QzpcVXNlcnNcTWljaGFlbCBSeWFuXERvY3VtZW50c1xDb25zdW1lckFQSVxPcHRlemkuQ29uc3VtZXJBcGlcdjFcY29uc3VtZXJccHJvZmlsZS1pbWFnZQ==?=
我需要在返回之前重置流位置:
blob.FetchAttributes();
blob.DownloadToStream(imageStream);
imageStream.Position = 0;
return new ImageStream
{
BlobStream = imageStream,
ContentType = blob.Properties.ContentType
};
我正在尝试使端点 return 成为包含图像的 MemoryStream。
这是我目前的代码:
控制器端点:
[Route("v1/consumer/profile-image")]
[HttpGet]
public async Task<HttpResponseMessage> GetProfileImage(string id)
{
var result = await ImageService.GetImage(true, id);
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(result.BlobStream)
};
response.Content.Headers.ContentType = new MediaTypeHeaderValue(result.ContentType);
return response;
}
服务方式:
public async Task<ImageStream> GetImage(string profileId)
{
var imageStream = new MemoryStream();
var account = CloudStorageAccount.Parse(ConnectionString);
var client = account.CreateCloudBlobClient();
CloudBlobContainer container;
CloudBlockBlob blob = null;
container = client.GetContainerReference(ConsumerImageContainer);
blob = container.GetBlockBlobReference(profileId);
blob.FetchAttributes();
blob.DownloadToStream(imageStream);
return new ImageStream
{
BlobStream = imageStream,
ContentType = blob.Properties.ContentType
};
}
public class ImageStream
{
public MemoryStream BlobStream { get; set; }
public string ContentType { get; set; }
}
我的问题是我似乎没有取回任何内容 - 我可以看到内容类型设置正确,但图像没有设置:
Request Headers
Request URL: https://localhost:44347/v1/consumer/profile-image
Request Method: GET
Status Code: 200
Remote Address: [::1]:44347
Referrer Policy: no-referrer-when-downgrade
Response Headers
access-control-allow-origin: *
content-length: 0
content-type: image/jpeg
date: Mon, 09 Jul 2018 13:38:58 GMT
server: Microsoft-IIS/10.0
status: 200
x-powered-by: ASP.NET
x-sourcefiles: =?UTF-8?B?QzpcVXNlcnNcTWljaGFlbCBSeWFuXERvY3VtZW50c1xDb25zdW1lckFQSVxPcHRlemkuQ29uc3VtZXJBcGlcdjFcY29uc3VtZXJccHJvZmlsZS1pbWFnZQ==?=
我需要在返回之前重置流位置:
blob.FetchAttributes();
blob.DownloadToStream(imageStream);
imageStream.Position = 0;
return new ImageStream
{
BlobStream = imageStream,
ContentType = blob.Properties.ContentType
};