2016-05-18 6 views
3

私は、DMZ(インターネット)サーバー用のサービスを提供するイントラネットWebAPIサーバーを持っています。WebAPIからのサーバーコールイメージ

APIアクション:

[HttpGet] 
public HttpResponseMessage ImagePath(string filePath) 
{ 
    var result = new HttpResponseMessage(HttpStatusCode.OK); 
    FileStream fileStream = new FileStream(filePath, FileMode.Open); 
    Image image = Image.FromStream(fileStream); 
    MemoryStream memoryStream = new MemoryStream(); 
    image.Save(memoryStream, ImageFormat.Jpeg); 
    result.Content = new ByteArrayContent(memoryStream.ToArray()); 
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 

    return result; 
} 

APIがsucessfully画像を返すん。 私は、イントラネットへのDMZからの要求を続行したいが、私は、以下の私のコードをアクションの書き方を知らない:

public async Task<HttpResponseMessage> ImagePath(string filePath) 
{ 
    HttpClientHandler handler = new HttpClientHandler() 
    { 
     UseDefaultCredentials = true, 
    }; 

    using (var client = new HttpClient(handler)) { 

     client.BaseAddress = new Uri(apiUrl); //apiUrl is my intranet domain 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("image/jpeg")); 

     HttpResponseMessage fs = await client.GetAsync("cipap/api/baseapi/ImagePath?filePath=" + filePath); 
     return fs; 

    } 

    //FileStream fs = new FileStream(filePath, FileMode.Open); 
    //return File(fs, "image/jpeg"); 
} 

誰かが私を助けてもらえますか?どうもありがとう。

答えて

0

私は最終的にanwser、
だけのことで、FileResultタイプのアクションを作る し、ファイルを返すが見つかりました:

File(fs.Content.ReadAsByteArrayAsync().Result, "image/jpeg"); 

もう一つはWEBAPIアクションで、私は設定する必要があるということです

以下のようにFILESTREAMまたはファイルが最初の要求の後にロックされます。

FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); 

public async Task<FileResult> ImagePath(string filePath) 
{ 

    HttpClientHandler handler = new HttpClientHandler() 
    { 
     UseDefaultCredentials = true, 
    }; 

    using (var client = new HttpClient(handler)) { 

     client.BaseAddress = new Uri(apiUrl); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("image/jpeg")); 
     HttpResponseMessage fs = await client.GetAsync("cipap/api/baseapi/ImagePath?filePath=" + filePath); 

     return File(fs.Content.ReadAsByteArrayAsync().Result, "image/jpeg");    
    } 

} 

ref: Download file prompt when using WebAPI HttpResponseMessage

関連する問題