2014. 8. 13. 17:46 Spring/Java
파일을 BLOB 형으로 DB에 저장하곤 한다-
이미지 역시 파일이니까 BLOB으로 저장하였는데,
출력하는 방법을 모르겠다-
생각보다 간단하다-
1. DB에서 BLOB형 이미지를 byte[]형으로 가져온다-
1 2 3 4 5 6 7 | @RequestMapping("/logoShowForStudent/{num}") public void imageView(HttpServletRequest req, HttpServletResponse res, @PathVariable("num") int num) throws IOException { res.setContentType("image/jpeg"); byte[] imagefile = service.showlogo(num); InputStream in1 = new ByteArrayInputStream(imagefile); IOUtils.copy(in1, res.getOutputStream()); } |
2. 어노테이션으로 지정한 request에 맞는 url을 이미지의 src로 준다-
1 | <img src ="/logoShowForStudent/${comp_detail.company_detail_seq }"></img> |
Excel Insert, poi (0) | 2014.08.12 |
---|---|
AOP 사용, 어노테이션 (0) | 2014.08.10 |
ppt to image/pdf 변환 (0) | 2014.08.10 |
간단한 암호화, MD5, SHA1 (0) | 2014.08.10 |
MyBatis 연결 설정 (0) | 2014.08.09 |
2014. 8. 12. 22:01 Spring/Java
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
<jquery.form.js 추가>
1 | <script src="/resources/js/jquery.form.js"></script> |
<javascript 부분>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function checkFileType(filePath){ var fileFormat = filePath.split("."); if(fileFormat.indexOf("xls") > -1){ return true; }else{ return false; } } function check(){ var file = $("#excel").val(); if(file == "" || file == null){ alert("파일을 선택해주세요."); return false; }else if(!checkFileType(file)){ alert("엑셀 파일만 업로드 해주세요."); return false; } if(confirm("업로드 하시겠습니까?")){ $("#excelUpForm").attr("action", "/admin/compExcelUpload"); var options = { success : function(data) { alert("모든 데이터가 업로드 되었습니다."); $("#ajax-content").html(data); }, type : "POST" }; $('form').ajaxSubmit(options); } } |
3. Server에서 excel 처리-
파일을 따로 저장할 필요가 없어서, 받은 파일의 input stream으로 workbook을 만들고-
각 Column을 VO객체에 담아서 ArrayList를 만들었다-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | @RequestMapping(value = "admin/compExcelUpload") public ModelAndView excelUpload(MultipartHttpServletRequest req) throws ParseException{ mav = new ModelAndView("/admin/comp_list"); MultipartFile file = req.getFile("excel"); ArrayList<CompanyDetailVO> comp_list = new ArrayList<>(); if (file != null && file.getSize() > 0) { try { Workbook wb = new HSSFWorkbook(file.getInputStream()); Sheet sheet = wb.getSheetAt(0); int last = sheet.getLastRowNum(); System.out.println("Last : " + last); for(int i=1; i<=last; i++){ Row row = sheet.getRow(i); CompanyDetailVO company = new CompanyDetailVO(); String company_name = row.getCell(0, Row.CREATE_NULL_AS_BLANK).getStringCellValue(); if(!company_name.equals("") && company_name != null){ company.setCompany_name(company_name); company.setCompany_ceo(row.getCell(1, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setIncorp_date(row.getCell(2, Row.CREATE_NULL_AS_BLANK).getDateCellValue()); company.setStaff_cnt((int) row.getCell(3, Row.CREATE_NULL_AS_BLANK).getNumericCellValue()); company.setCompany_url(row.getCell(4, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_sales((int) row.getCell(5, Row.CREATE_NULL_AS_BLANK).getNumericCellValue()); company.setCompany_type(row.getCell(6, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); String zipcode = row.getCell(7, Row.CREATE_NULL_AS_BLANK).getStringCellValue(); String[] zipArray = zipcode.split("-"); company.setCompany_zipcode1(zipArray[0]); company.setCompany_zipcode2(zipArray[1]); company.setCompany_addr(row.getCell(8, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_detail_addr(row.getCell(9, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_telnumber(row.getCell(10, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_ad_url1(row.getCell(11, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_ad_url2(row.getCell(12, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_ad_url3(row.getCell(13, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_ad_url4(row.getCell(14, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_ad_url5(row.getCell(15, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); company.setCompany_ad_url6(row.getCell(16, Row.CREATE_NULL_AS_BLANK).getStringCellValue()); comp_list.add(company); } } } catch (IllegalStateException | IOException e) { e.printStackTrace(); } } service.insertCompExcel(comp_list); mav.addObject("comp_list", service.getCompanies()); return mav; } |
4. 추가적으로 MyBatis 다중 Insert
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
BLOB으로 저장 된 이미지 출력 (0) | 2014.08.13 |
---|---|
AOP 사용, 어노테이션 (0) | 2014.08.10 |
ppt to image/pdf 변환 (0) | 2014.08.10 |
간단한 암호화, MD5, SHA1 (0) | 2014.08.10 |
MyBatis 연결 설정 (0) | 2014.08.09 |
2014. 8. 10. 14:59 Spring/Java
1 2 3 4 5 6 7 8 9 10 11 | <!-- AOP 관련 --> <dependency> <groupid>org.aspectj</groupid> <artifactid>aspectjweaver</artifactid> <version>1.7.4</version> </dependency> <dependency> <groupid>cglib</groupid> <artifactid>cglib</artifactid> <version>2.2.2</version> </dependency> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.web.servlet.ModelAndView; @Aspect public class AdminAspect { @Pointcut("bean(adminController) || bean(adminStudentController)") public void adminOperation(){} @Around("adminOperation()") public Object aroundAnyAdminOperation(ProceedingJoinPoint joinPoint) throws Throwable { HttpServletRequest req = null; for (Object obj : joinPoint.getArgs()) { if (obj instanceof HttpServletRequest) { req = (HttpServletRequest) obj; } } String connUri = req.getRequestURI(); System.out.println(connUri); boolean isPass = false; boolean isLogined = false; HttpSession session = req.getSession(); String adminLogined = (String)session.getAttribute("adminLogined"); if(adminLogined != null || !adminLogined.equals("")){ isLogined = true; }else if(connUri.startsWith("/login")){ isPass = true; } if(!isLogined || !isPass){ ModelAndView mav = new ModelAndView("/admin_login"); session.setAttribute("error", "관리자 로그인 후 이용 가능합니다."); return mav; }else{ Object result = joinPoint.proceed(); return result; } } } |
BLOB으로 저장 된 이미지 출력 (0) | 2014.08.13 |
---|---|
Excel Insert, poi (0) | 2014.08.12 |
ppt to image/pdf 변환 (0) | 2014.08.10 |
간단한 암호화, MD5, SHA1 (0) | 2014.08.10 |
MyBatis 연결 설정 (0) | 2014.08.09 |
2014. 8. 10. 01:51 Spring/Java
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- ppt --> <dependency> <groupid>org.apache.poi</groupid> <artifactid>poi-scratchpad</artifactid> <version>3.10-FINAL</version> </dependency> <!-- iText pdf --> <dependency> <groupid>com.itextpdf</groupid> <artifactid>itextpdf</artifactid> <version>5.5.2</version> </dependency> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.UUID; import javax.imageio.ImageIO; import org.apache.poi.hslf.model.Slide; import org.apache.poi.hslf.usermodel.SlideShow; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.pdf.PdfWriter; public class PPTtoPDFConverter { String realFolder = FileManager.realFolder; private String pdfFileName; public PPTtoPDFConverter(){ } public PPTtoPDFConverter(String fileName){ try { setPdfFileName(this.convert(fileName)); } catch (IOException | DocumentException e) { e.printStackTrace(); } } private void setPdfFileName(String pdfFileName) { this.pdfFileName = pdfFileName; } public String getPdfFileName() { return pdfFileName; } private String convert(String fileName) throws IOException, DocumentException{ //1.Read PPT file FileInputStream fis = new FileInputStream(realFolder + fileName); SlideShow ppt = new SlideShow(fis); fis.close(); //2.Draw Image Dimension pageSize = ppt.getPageSize(); Slide[] slide = ppt.getSlides(); for(int i=0; i<slide.length; i++){ BufferedImage image = new BufferedImage(pageSize.width, pageSize.height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = image.createGraphics(); graphics.setPaint(Color.white); //이미지 영역을 클리어 graphics.fill(new Rectangle2D.Float(0, 0, pageSize.width, pageSize.height)); slide[i].draw(graphics); File dir = new File(realFolder + "tempImg/"); if (!dir.isDirectory()) { dir.mkdirs(); } FileOutputStream fos = new FileOutputStream(dir + "temp" + (i+1) + ".png"); ImageIO.write(image, "png", fos); } //3.Image To PDF Document document = new Document(); File dir = new File(realFolder + "portfolioPDF/"); if (!dir.isDirectory()) { dir.mkdirs(); } String pdfFileName = "portfolioPDF/" + UUID.randomUUID().toString(); PdfWriter.getInstance(document, new FileOutputStream(realFolder + pdfFileName)); document.open(); for(int i=1; i<=slide.length; i++){ String imagePath = realFolder + "tempImg/temp" + i + ".png"; Image image = Image.getInstance(imagePath); document.add(image); //4.Delete Image File file = new File(imagePath); file.delete(); } document.close(); return pdfFileName; } } |
BLOB으로 저장 된 이미지 출력 (0) | 2014.08.13 |
---|---|
Excel Insert, poi (0) | 2014.08.12 |
AOP 사용, 어노테이션 (0) | 2014.08.10 |
간단한 암호화, MD5, SHA1 (0) | 2014.08.10 |
MyBatis 연결 설정 (0) | 2014.08.09 |
2014. 8. 10. 01:21 Spring/Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class CEncrypt { MessageDigest md; String strSRCData = ""; String strENCData = ""; public CEncrypt() { } public CEncrypt(String EncMthd, String strData) { this.encrypt(EncMthd, strData); } public void encrypt(String EncMthd, String strData) { try { MessageDigest md = MessageDigest.getInstance(EncMthd); // "MD5" or "SHA1" byte[] bytData = strData.getBytes(); md.update(bytData); byte[] digest = md.digest(); for (int i = 0; i < digest.length; i++) { strENCData = strENCData + Integer.toHexString(digest[i] & 0xFF).toUpperCase(); } } catch (NoSuchAlgorithmException e) { }; strSRCData = strData; } public String getEncryptData() { return strENCData; } public String getSourceData() { return strSRCData; } public boolean equal(String strData) { if (strData == strENCData) return true; return false; } } |
1 2 | CEncrypt enc = new CEncrypt("SHA1", adminPass); String PW = enc.getEncryptData(); |
BLOB으로 저장 된 이미지 출력 (0) | 2014.08.13 |
---|---|
Excel Insert, poi (0) | 2014.08.12 |
AOP 사용, 어노테이션 (0) | 2014.08.10 |
ppt to image/pdf 변환 (0) | 2014.08.10 |
MyBatis 연결 설정 (0) | 2014.08.09 |
2014. 8. 9. 22:08 Spring/Java
1 2 3 4 5 6 7 8 9 10 11 | <!--MyBatis --> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.2.5</version> </dependency> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version>1.2.2</version> </dependency> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!--?xml version="1.0" encoding="UTF-8"?--> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="cacheEnabled" value="true"></setting> <setting name="lazyLoadingEnabled" value="false"></setting> <setting name="multipleResultSetsEnabled" value="true"></setting> <setting name="useColumnLabel" value="true"></setting> <setting name="useGeneratedKeys" value="false"></setting> <setting name="defaultExecutorType" value="SIMPLE"></setting> <setting name="defaultStatementTimeout" value="25000"></setting> <!-- 전통적인 데이터베이스 컬럼명 형태인 A_COLUMN을 CamelCase형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 --> <setting name="mapUnderscoreToCamelCase" value="false"></setting> <setting value="VARCHAR" name="jdbcTypeForNull"></setting> </settings> <typealiases> <typealias alias="resumeComment" type="com.miram.portal1.client.vo.ResumeCommentVO"></typealias> </typealiases> <mappers> <mapper resource="mybatis/home.xml"></mapper> </mappers> </configuration> |
1 2 3 4 5 6 7 8 9 10 | <!--?xml version="1.0" encoding="UTF-8"?--> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.miram.portal1.admin.dao.AdminDAO"> <select id="getAdmin" parametertype="String" resulttype="admin"> SELECT * FROM MEM_ADMIN WHERE ADMIN_ID = #{admin_id} </select> </mapper> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <bean id="HomeDAO" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="com.miram.portal1.client.dao.HomeDAO"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:/mybatis/MapperConfig.xml"/> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory"/> </bean> |
BLOB으로 저장 된 이미지 출력 (0) | 2014.08.13 |
---|---|
Excel Insert, poi (0) | 2014.08.12 |
AOP 사용, 어노테이션 (0) | 2014.08.10 |
ppt to image/pdf 변환 (0) | 2014.08.10 |
간단한 암호화, MD5, SHA1 (0) | 2014.08.10 |