2012-01-07 5 views
0

이미지를 업로드 할 수있는 asp.net mvc 응용 프로그램이 있습니다. 나는 그것을하기위한 최선의 방법이 무엇인지 궁금합니다.이미지를 저장하는 가장 좋은 방법은 무엇입니까?

는 지금 내가 가진이

HttpPostedFileBase uploadedImg = Session[SessionImgKey] as HttpPostedFileBase; 

if (uploadedImg != null) 
{ 
    string fileName = CreateFile(MyField.Name, uploadedImg); 
    tableA.ImagePath = String.Concat(ImgFolderPathLoctaion, "\\", fileName); 
} 

이 괜찮습니다하지만 난 그것을 내 서비스 레이어를 이동하려는 나는 내 서비스 계층 프로젝트로 가져 오기에 web.dll을 가지고 싶지 않아.

그래서 스트림을 사용해야합니까? 또는 Image Save (그림이 업로드 된 이미지가 아닌 페인트 클래스를 통해 이미지에 맞게 조정 된 것 같습니다.)

+2

업로드 한 파일이 세션에 저장되는 이유는 무엇입니까? – alexn

+0

jquery formwizard가 있습니다. ajax (직렬화 사용)에 의해 게시됩니다. 아약스로 파일을 게시하는 것은 불가능합니다 (iframe 또는 html5를 사용하지 않고). plupload를 사용하여 업로드 버튼을 눌러야 만 세션에 저장되며 전체 양식을 제출하면 세션에서 빠져 나옵니다. – chobo2

답변

1

게시 된 파일에서 이미지 스트림을 가져 와서 이미지 (System.Drawing)로 변환 한 다음 저장하십시오.

var stream = uploadedImg.InputStream; 
var buffer = new byte[stream.Length]; 
stream.Read(buffer, 0, buffer.Length); 
//convert stream into image 
Image myImage = Image.FromStream(new MemoryStream(buffer)); 
myImage.Save("c:\myimage.jpg"); 
+0

이것은 스트림 리더/라이터를 사용하고 바이트를 쓰는 것보다 낫습니까? – chobo2

+0

HttpPostedFileBase의 InputStream 속성은 업로드 된 파일의 스트림을 다시 제공하므로 스트림 판독기가 필요 없으며 이미지의 Save 메서드는 파일에 버퍼링 된 이미지의 내용을 쓰고 스트림에서 동일한 작업이 수행됩니다 작가. 결과는 같습니다. –

+0

업로드 된 동일한 파일 확장자를 사용해야합니까, 아니면 표준을 강제해야한다고 생각합니까? (예 : jpg로 모든 것을 저장 하시겠습니까?) – chobo2

0

파일을 서비스 계층으로 전달해야 할 경우 HttpPostedFileBase의 InputStream 속성을 사용하여 스트림을 전달하십시오. 이렇게하면 서비스 계층에서 웹/프리젠 테이션 계층을 알 수 없습니다.

+0

이것이 내가 할 수있는 일이지만 서버에 쓰는 가장 좋은 방법은 무엇인지 확신 할 수 없습니까? 스트림 리더와 라이터를 사용합니까? – chobo2

관련 문제