sowon4187 4 سال پیش
والد
کامیت
a3f21ce751

+ 7 - 0
pom.xml

@@ -283,6 +283,13 @@
 			<scope>system</scope>
 			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xalan.jar</systemPath>
 		</dependency>
+		
+		<!-- 이미지 회전 관련  -->
+		<dependency>
+			<groupId>com.drewnoakes</groupId>
+			<artifactId>metadata-extractor</artifactId>
+			<version>2.12.0</version>
+		</dependency>
 	</dependencies>
 	
 	<build>

+ 31 - 2
src/main/java/com/style24/front/biz/web/TsfCommonController.java

@@ -1,5 +1,8 @@
 package com.style24.front.biz.web;
 
+import java.awt.Image;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.List;
@@ -22,6 +25,12 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.drew.imaging.ImageMetadataReader;
+import com.drew.imaging.ImageProcessingException;
+import com.drew.metadata.Directory;
+import com.drew.metadata.Metadata;
+import com.drew.metadata.MetadataException;
+import com.drew.metadata.exif.ExifIFD0Directory;
 import com.gagaframework.web.util.GagaFileUploadUtil;
 import com.gagaframework.web.util.GagaFileUtil;
 import com.gagaframework.web.util.GagaUploadedFileInfo;
@@ -94,15 +103,24 @@ public class TsfCommonController extends TsfBaseController {
 	 * @return 업로드한 파일의 정보
 	 * @throws IOException
 	 * @author gagamel
+	 * @throws ImageProcessingException 
+	 * @throws MetadataException 
 	 * @since 2019. 12. 6
 	 */
 	@PostMapping("/file/upload")
 	@ResponseBody
-	public GagaUploadedFileInfo uploadFile(@RequestParam(value = "subDir") String subDir, @RequestParam(value = "policy", required = false) String policy, MultipartFile file) throws IOException {
+	public GagaUploadedFileInfo uploadFile(@RequestParam(value = "subDir") String subDir, @RequestParam(value = "policy", required = false) String policy, MultipartFile file) throws IOException, ImageProcessingException, MetadataException {
 		if (StringUtils.isEmpty(policy)) {
 			policy = "default";
 		}
-
+		int orientation = 1;
+		Metadata metadata = ImageMetadataReader.readMetadata(convert(file));
+		
+		Directory directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
+		if(directory != null) {
+			orientation = directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);
+		}
+		log.debug("orientation: {}", orientation);
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload." + policy + ".target.path"), subDir);
 
 		GagaFileUploadUtil fuUtil = new GagaFileUploadUtil(targetPath, Long.parseLong(env.getProperty("upload." + policy + ".max.size")), env.getProperty("upload." + policy + ".allow.extension"), env.getProperty("upload." + policy + ".view"));
@@ -121,6 +139,17 @@ public class TsfCommonController extends TsfBaseController {
 //		}
 		return ufInfo;
 	}
+	
+	public File convert(MultipartFile multipartFile) throws IOException {
+		File file = new File(multipartFile.getOriginalFilename());
+		file.createNewFile();
+		FileOutputStream fos = new FileOutputStream(file);
+		fos.write(multipartFile.getBytes());
+		fos.close();
+		return file;
+	}
+
+	
 
 	/**
 	 * Delete a file

+ 12 - 10
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html

@@ -641,6 +641,18 @@ var fnChooseFile = function(obj) {
 				});                                                                       
 				return false;                                                             
 			}       
+			
+			/* var limg = loadImage(file, function (img, data) {
+	            img.toBlob(function (blob) {
+	                var rotateFile = new File([blob], file.name, { type: fileType });
+	                var reader = new FileReader();
+	                reader.onload = function (e) { $(".pics").find("img").last().attr("src", e.target.result); }
+
+	                reader.readAsDataURL(rotateFile);
+					console.log(orientation);
+	            }, fileType)
+	        }, { orientation: 1}); */
+			
 			 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
 						, file
 						, function(result) {
@@ -648,16 +660,6 @@ var fnChooseFile = function(obj) {
 							$(".pics").children().last().append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
 							$(".pics").children().last().append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
 							
-							var limg = loadImage(file, function (img, data) {
-					            img.toBlob(function (blob) {
-					                var rotateFile = new File([blob], file.name, { type: fileType });
-					                var reader = new FileReader();
-					                reader.onload = function (e) { $(".pics").find("img").last().attr("src", e.target.result); }
-
-					                reader.readAsDataURL(rotateFile);
-
-					            }, fileType)
-					        }, { orientation: 6});
 						}
 				); 
 		}