2015-09-22 6 views
0

Поскольку домен BLOB недоступен для некоторых устройств, я должен использовать свой портал (ASP.NET MVC 5) для маршрутизации запроса. Вот код:ASP.NET MVC 5, возвращает изображение из BLOB

public class ImageController : Controller 
{ 
    [HttpGet] 
    public async Task<HttpResponseMessage> GetImage() 
    { 
     UriBuilder uriBuilder = new UriBuilder() 
     { 
      Scheme = "https", 
      Host = "portalvhdszhm9fnx146yln.blob.core.windows.net", 
      Path = "ads/logo.jpg" 
     }; 

     using (HttpClient client = new HttpClient()) 
     { 
      return await client.GetAsync(uriBuilder.ToString()); 
     } 
    } 
} 

Я намерен сделать контроллер маршрутизатором для файла blob. Но контроллер возвращает следующее:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/10.0 
X-AspNetMvc-Version: 5.2 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?RTpcTXlQcm9qXEF1dGhDbG91ZFxBdXRoQ2xvdWRQb3J0YWxcaW1hZ2VcZ2V0aW1hZ2U=?= 
X-Powered-By: ASP.NET 
Date: Tue, 22 Sep 2015 17:21:02 GMT 
Content-Length: 539 

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    x-ms-request-id: 3fad2a06-0001-004b-7f5b-f549ad000000 
    x-ms-version: 2009-09-19 
    x-ms-lease-status: unlocked 
    x-ms-blob-type: BlockBlob 
    Date: Tue, 22 Sep 2015 17:21:01 GMT 
    ETag: 0x8D2BB762EED052B 
    Server: Windows-Azure-Blob/1.0 
    Server: Microsoft-HTTPAPI/2.0 
    Content-Length: 27780 
    Content-MD5: pddt6QJK1FjJgiMTp5HKGQ== 
    Content-Type: application/octet-stream 
    Last-Modified: Sat, 12 Sep 2015 13:29:28 GMT 
} 

Я хочу показать изображение блоба, когда требуется контроллер. Каков правильный код?

+0

Вы пытались вернуть «FileResult»? – mason

+0

Не могли бы вы предоставить пример кода возврата FileResult? –

ответ

0

Вы можете попробовать:

public class ImageController : Controller 
{ 
    // GET: Image 
    public ActionResult Index(string containerName, string blobName) 
    { 
     CloudBlobContainer cont = StorageProxy.GetBlobContainer(containerName); 
     CloudBlockBlob blob = cont.GetBlockBlobReference(blobName); 
     MemoryStream ms = new MemoryStream(); 

     blob.DownloadToStream(ms); 
     ms.Position = 0; 

     return new FileStreamResult(ms, "image/png"); 
    } 
} 

Это должно работать с JS от: Using Javascript to Display Blob

0

Если я вас правильно понял, вы хотите, чтобы вернуть изображение к клиенту, в этом случае возвращать содержимое ответа так:

[HttpGet] 
public async Task<FileStreamResult> GetImage() 
{ 
    var cd = new ContentDisposition 
    { 
     FileName = "My awesome image.jpg", 
     Inline = false //force download instead of viewing in browser 
    }; 

    Response.AppendHeader("Content-Disposition", cd.ToString()); 

    UriBuilder uriBuilder = new UriBuilder() 
    { 
     Scheme = "https", 
     Host = "portalvhdszhm9fnx146yln.blob.core.windows.net", 
     Path = "ads/logo.jpg" 
    }; 

    using (HttpClient client = new HttpClient()) 
    { 
     var resp = await client.GetAsync(uriBuilder.ToString()); 
     var content = resp.Content as StreamContent; 
     var stream = await content.ReadAsStreamAsync(); 
     return new FileStreamResult(stream, "image/jpeg"); 
    }    
}