我目前有这种方法:
public HttpResponseMessage Get(string FileId, string VersionId)
{
byte[] fileContents;
var file = DataRepository.GetSingle<FileModel>(ObjectId.Parse(FileId));
var fileDir = file.Dir + "/"+VersionId+ file.FileExtension;
var result = new HttpResponseMessage(HttpStatusCode.OK);
using (MemoryStream memoryStream = new MemoryStream())
{
using (var image = new Bitmap(WebRequest
.Create(fileDir)
.GetResponse()
.GetResponseStream()))
{
image.Save(memoryStream, StorageServiceHelper.GetImageFormatFromFileName(fileDir));
fileContents = memoryStream.ToArray();
var stream = new MemoryStream(fileContents);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue(file.MediaType);
}
}
return result;
因此,对于每个图像请求,它都会调用此方法,但在第一个请求时似乎非常缓慢(每个请求5 kb文件至少1秒)。有更快的方法吗? }
答案 0 :(得分:0)
这看起来像一个非常复杂的方法,但我不知道为什么你这样做的细节。在任何情况下,这是我的控制器返回图像:
public async Task<HttpResponseMessage> Get(HttpRequestMessage request, int id)
{
byte[] img = await _repo.GetImgAsync(id);//gets image from database.
HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(img)
};
msg.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
return msg;
}
另外,如果它只是第一个请求很慢,那么可能是Asp.Net启动应用程序。如果在IIS中重新启动应用程序池,则可以在实时服务器上看到相同的内容。