제목 그대로입니다. 모바일로 촬영한 사진 중
세로로 찍은 이미지가 실제로 서버에 업로드시에는 옆으로 누워버리더군요.
(오유에도 같은 문제가 있죠 아마?)
인터넷에 찾아봤더니 PHP로 해결방법은 있던데
ASP.NET에서는 어떻게 처리해야될지 모르겠습니다. ㅠㅠ
우선 제가 만든 이미지 업로드 소스는 아래와 같습니다
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" Debug="true" %>
<%@ Import Namespace = "System.IO" %>
<%@ Import Namespace = "System.Text" %>
<script runat="server">
string srvRoot, srvPath, srcPath;
protected void Page_Load(object sender, EventArgs e){
srvRoot = Request["srvRoot"];
srvPath = Request["srvPath"];
srcPath = Request["srcPath"];
if( srvRoot == "" ){ srvRoot = Server.MapPath("\\"); }
HttpPostedFile requestFile = Request.Files[0];
string fileName = requestFile.FileName;
string fullPath = srvRoot + srvPath + fileName;
DirectoryInfo di = new DirectoryInfo(srvRoot + srvPath);
if( !di.Exists ){ di.Create(); }
string fnm, ext = fileName.Substring(fileName.LastIndexOf(".") + 1);
FileInfo fi = new FileInfo(fullPath);
if( fi.Exists ){
int fidx = 0;
fnm = fileName.Substring(0, fileName.LastIndexOf("."));
do{
fidx++;
fileName = fnm + "[" + fidx.ToString() + "]." + ext;
fullPath = srvRoot + srvPath + fileName;
fi = new FileInfo(fullPath);
}while( fi.Exists );
}
try{
requestFile.SaveAs(fullPath);
Response.Write("{\"result\":\"" + fileName + "\"}");
}catch{
Response.Write("{\"result\":false, \"error\":\"\"}");
}
}
</script>
-----------------
따로 제가 만든 위지윅에디터를 이용해 업로드 되는 이미지라
몇가지 정보는 리퀘스트파라미터로 받아오기때문에 소스가 좀 이상할 수 있습니다.
이 부분을 어떻게 수정해야 할까요.... ㅠㅠ
-----------------
사랑해요 스택오버플로....
정답찾고 수정한 뒤 글 수정합니다.
이제 보니 본삭금을 안걸었었네요. 뒤늦게 본삭금걸고 자답 씁니다.
아래와 같이 수정 완료하였습니다.
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" Debug="true" %> <%@ Import Namespace = "System.IO" %> <%@ Import Namespace = "System.Drawing" %> <%@ Import Namespace = "System.Drawing.Imaging" %> <%@ Import Namespace = "System.Text" %> <script runat="server"> //전역변수 선언 string srvRoot, srvPath, srcPath; protected void Page_Load(object sender, EventArgs e){ //전역변수 초기화 srvRoot = Request["srvRoot"]; srvPath = Request["srvPath"]; srcPath = Request["srcPath"]; if( srvRoot == "" ){ srvRoot = Server.MapPath("\\"); } // 파일컨트롤 선언 및 초기화 HttpPostedFile requestFile = Request.Files[0]; // 파일명, 전체경로 설정 string fileName = requestFile.FileName; string fullPath = srvRoot + srvPath + fileName; // 서버에 파일폴더가 존재하지 않을시 생성 DirectoryInfo di = new DirectoryInfo(srvRoot + srvPath); if( !di.Exists ){ di.Create(); } // 파일 중복체크 string fnm, ext = fileName.Substring(fileName.LastIndexOf(".") + 1); FileInfo fi = new FileInfo(fullPath); if( fi.Exists ){ int fidx = 0; fnm = fileName.Substring(0, fileName.LastIndexOf(".")); do{ fidx++; fileName = fnm + "[" + fidx.ToString() + "]." + ext; fullPath = srvRoot + srvPath + fileName; fi = new FileInfo(fullPath); }while( fi.Exists ); } try{ requestFile.SaveAs(fullPath); // 파일 이미지의 확장자가 JPG 또는 JPEG 일 경우 EXIF 데이터 추출하여 이미지 270도 회전 string fileext = fullPath.Substring(fullPath.LastIndexOf(".") + 1, 3); fileext = fileext.ToUpper(); if( fileext == "JPG" ){ string file = fullPath; FileInfo info = new FileInfo(file); long filesize = info.Length; FileStream stream = new FileStream(file,FileMode.Open,FileAccess.Read); System.Drawing.Image img = System.Drawing.Image.FromStream(stream,false,false); PropertyItem item = img.GetPropertyItem(0x0112); int orientation = item.Value[0]; stream.Dispose(); if( orientation == 6 ){ System.Drawing.Image rotateimg = System.Drawing.Image.FromFile(fullPath); rotateimg.RotateFlip(RotateFlipType.Rotate270FlipXY); rotateimg.Save(fullPath); rotateimg.Dispose(); } } Response.Write("{\"result\":\"" + fileName + "\"}"); }catch{ Response.Write("{\"result\":false, \"error\":\"\"}"); } } </script>