2016-08-27 8 views
12

मुझे वेब एपीआई विधि के साथ एक छवि वापस करने की आवश्यकता है। नीचे दिया गया कोड ठीक काम करता प्रतीत होता है सिवाय इसके कि मुझे यह संदेश फिडलर की छवि दृश्य विंडो में मिलता है, "यह प्रतिक्रिया एन्कोड की गई है, लेकिन यह छवि होने का दावा नहीं करती है।"वेब एपीआई के साथ एक छवि कैसे वापस करें विधि

public HttpResponseMessage Get() 
{ 
    using (FileStream fs = new FileStream(filePath, FileMode.Open)) 
    { 
     HttpResponseMessage response = new HttpResponseMessage(); 
     response.Content = new StreamContent(fs); 
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
     return response; 
    } 
} 

मैं इस कोड के साथ भी फ़िडलर में एक ही परिणाम देखें:

public HttpResponseMessage Get() 
{ 
    HttpResponseMessage response = new HttpResponseMessage(); 
    Byte[] b = (GetImageByteArray()); 
    response.Content = new ByteArrayContent(b); 
    response.Content.LoadIntoBufferAsync(b.Length).Wait(); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
    return response; 
} 

मैं एक ही परिणाम प्राप्त अगर मैं .png प्रारूप का उपयोग करें।

आपकी मदद की सराहना,

+0

क्या आप GetImageByteArray() विधि के बारे में विस्तार प्रदान कर सकते हैं? क्या आप भी सुनिश्चित हैं कि आप जो छवि पढ़ रहे हैं वह jpeg/jpg छवि है और अन्य प्रारूप छवि नहीं है? – dotnetstep

उत्तर

21

अगर मैं सही ढंग से समझ तो आप asp.net कोर के लिए विशिष्ट पूछ रहे हैं। एएसपीनेट कोर में HttpResponseMessage परिणाम को वापस करने का एक तरीका नहीं है जिस तरह से हम एएसपीनेट वेब एपीआई 2

एएसपीनेट कोर (वेब ​​एपीआई) में बस इस तरह दिखते हैं।

[HttpGet] 
public IActionResult Get() 
{    
    Byte[] b = System.IO.File.ReadAllBytes(@"E:\\Test.jpg"); // You can use your own method over here.   
    return File(b, "image/jpeg"); 
} 

नोट: "। उसकी प्रतिक्रिया एन्कोड किया गया है, लेकिन एक छवि होने का दावा नहीं करता है" के रूप में आपको लगता है कि फ़िडलर imageView में आप इस तरह संदेश दिखाई उल्लेख क्योंकि एएसपीनेट कोर सरल वर्ग के रूप में HttpResponseMessage पर विचार करता है और जेसन या एक्सएमएल में परिवर्तित होता है।

+0

ठीक है, अंतिम परिणाम क्या मायने रखता है। आपका कोड बहुत अच्छी तरह से करता है। HttpResponseMessage के साथ बिल्ली। :-) मैं इसे सही उत्तर के रूप में चिह्नित करने जा रहा हूं। बहुत धन्यवाद, –

+3

'फ़ाइल' विधि ओवरलोड का उपयोग करना बेहतर है जो स्ट्रीम स्वीकार करता है, इस तरह आप इसे भेजने से पहले सर्वर मेमोरी में चित्र लोड नहीं करना चाहते हैं। 'फाइलस्ट्रीम स्ट्रीम = फ़ाइल। ओपन (@ "ई: \\ Test.jpg"); वापसी फ़ाइल (स्ट्रीम, "छवि/जेपीईजी"); 'या इससे भी आसान:' वापसी भौतिक फ़ाइल ("@ ई: \\ Test.jpg", "छवि/jpg"); 'https://github.com/aspnet/ MVC/ब्लॉब/dev/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs # L711 – Tseng

संबंधित मुद्दे