2013-02-19 4 views
1

서버에서 이미지를 다운로드하고 브라우저에 표시하고 싶습니다. 하지만 브라우저 (localhost : port/api/service/imageID)에 url을 입력하면 이미지를 저장하거나 열어 보도록 요청하는 다운로드 상자가 나타납니다. 그러나 이미지를 브라우저에 곧바로 표시하고 싶습니다.ASP .net Web Api 이미지 다운로드 및보기

public HttpResponseMessage Get(int id) 
{ 
    HttpResponseMessage response; 
    var image = _repository.RetrieveImage(id); 

    if (image == null) 
    { 
    response = new HttpResponseMessage(HttpStatusCode.NotFound); 
    } 
    else 
    { 
    response = new HttpResponseMessage(HttpStatusCode.OK); 

    response.Content = new StreamContent(new MemoryStream(image.ImageData)); 
    response.Content = new ByteArrayContent(image.ImageData); 
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
    response.Content.Headers.ContentDisposition.FileName = image.OriginalFileName; 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue(image.Mime); 
    response.Content.Headers.ContentLength = image.ImageData.Length; 
    } 
    return response; 

덕분에 "첨부 파일"내용 처리 헤더를 사용하지 마십시오 도움

+0

: 당신이 저장시 파일 이름을 유지하려면 Content-Disposition에 "인라인"로 변경. 그냥'StreamContent'를 사용해 보셨나요? –

+0

예,하지만 작동하지 않습니다. 나는 디지털 ID – aimyas

답변

2

에 대한 많은 : 이것은 내 컨트롤러 '가져 오기'방법이다. 이 헤더를 사용하면 브라우저가 인라인으로 표시하지 않고 지정된 파일을 다운로드하도록 지시합니다.

+0

에서 답변을 시도 할 것입니다, 정말 고마워요. – aimyas

0

당신 시나리오에서는 StreamContent를 반환하고이 콘텐츠의 적절한 콘텐츠 형식 헤더를 제공 할 수 있다고 생각합니다.

0

완전성을 위해 Content-Disposition을 제거하면 "다른 이름으로 저장"상황에 맞는 메뉴를 사용하여 저장하면 파일 이름에 대한 힌트가 제거되고 해당 URL을 기반으로 파일 이름이 제안됩니다 (예 : image/jpeg). 이 경우 URL의 마지막 부분이 ID이기 때문에 "42.jpg"와 같이됩니다. 내가 도울하지만 당신은 두 번`content` 블록 속성을 할당하는 것을 알 수 없었다

response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline") 
{ 
    FileName = image.OriginalFileName, 
    Size = image.ImageData.Length 
};