ASP.NET 웹 API를 사용하여 이미지를 반환하는 권장 방법이 있습니까?
2개의 파라미터(크기 조정을 위해 x와 y)로 영상을 반환하는 가장 좋은 방법은 무엇입니까?
예를들면
~/api/image12345/200/200
200x200jpg/png/또는 gif를 반환합니다.
반품할까요?System.Drawing.Image
객체 또는 수동으로 정의HTTPReponseMessage.Content
?
반환하면 안 됩니다.System.Drawing.Image
적절한 바이트로 변환하는 방법을 아는 포맷터를 추가하지 않는 한 이미지 바이트로 직렬화되지 않습니다.
한 가지 가능한 해결책은 다음을 반환하는 것입니다.HttpResponseMessage
아래와 같이 이미지가 콘텐츠에 저장됩니다.질문에 표시한 URL을 사용하려면 {imageName}, {width} 및 {height} 매개 변수를 매핑하는 경로가 필요합니다.
public HttpResponseMessage Get(string imageName, int width, int height)
{
Image img = GetImage(imageName, width, height);
using(MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(ms.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
return result;
}
}
그러나 여러 곳에서 이 작업을 수행하고 있다면 포맷터 경로를 사용하는 것이 "권장" 방법일 수 있습니다.프로그래밍의 거의 모든 것과 마찬가지로 답은 시나리오에 따라 달라집니다.
이미지가 무겁습니다. ASP.NET WebForms, HttpHandlers, MVC 및 Web API는 모두 정적 파일을 제공하는 작업을 매우 엉망으로 수행합니다.IIS는 이 작업을 매우 효율적으로 수행합니다. 종종 20-100배 더 효율적입니다.
좋은 성능을 얻고 싶다면 게시 중에 늦어도 URL 다시 쓰기를 수행합니다.IIS가 파일을 선택하여 제공할 수 있도록 요청 인증예, 이것은 HttpModule 수준의 이벤트 처리를 의미합니다.
[거부자:저는 다음 글과 오픈소스 프로젝트의 저자입니다]
이미지로 동적인 작업을 수행하는 경우 피해야 할 이미지 처리 위험에 대한 이 문서를 확인하고 ImageResizer를 검토해 보십시오.디스크 캐싱(IIS 정적 파일 처리 사용)이 뛰어나고 모든 종류의 이미지 생성에 쉽게 연결할 수 있습니다.고급 기능이 필요한 경우 AForge, FreeImage 및 WIC에 대한 선택적 바인딩도 제공합니다.
언급URL : https://stackoverflow.com/questions/12467546/is-there-a-recommended-way-to-return-an-image-using-asp-net-web-api
'source' 카테고리의 다른 글
왜 git branch --up-stream을 복구하기 위해 호출합니까? (0) | 2023.06.20 |
---|---|
Ruby에서 안전한 정수 구문 분석 (0) | 2023.06.20 |
Gradle 캐시를 지우는 방법은 무엇입니까? (0) | 2023.06.20 |
Spring Boot 화이트라벨 오류 페이지(type=Not Found, status=404) (0) | 2023.06.20 |
vuex 스토어를 라벨 페이지로 가져오는 동안 예기치 않은 토큰 오류가 발생했습니다. (0) | 2023.06.20 |