728x90

web.xml

<!-- TODO : image preview -->
<servlet>
    <servlet-name>previewImg</servlet-name>
    <servlet-class>com.jiransnc.framework.utils.ImageAttachServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>previewImg</servlet-name>
    <url-pattern>/prevImage/img/*</url-pattern>
</servlet-mapping>
<!-- end of image preview -->

 

ImageAttachServlet.java

@WebServlet("/upload/img/*") // 'WebServlet'이 동작안하는 경우 -> web.xml에 servlet설정 'uploadImg' 확인
public class ImageServlet extends HttpServlet {

	private final static Logger logger = LoggerFactory.getLogger(ImageServlet.class);
	private static String sPathInfo = "";
	
	@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
    	sPathInfo = request.getPathInfo();
    	if(sPathInfo == null)  {
    		sPathInfo = request.getServletPath();
    	}
    	
        String seq = URLDecoder.decode(sPathInfo.substring(1), "UTF-8");
        //logger.info(">> Attach image function type : " + seq);
        
        ServletContext ctx = request.getSession().getServletContext();
		WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(ctx);
		CmmnService cmmnService =  wac.getBean(CmmnService.class);
        		
        logger.info(">> Attach image upload fild seq : " + seq);

        try{
    		// DropZone 첨부파일 에서 사용중
        	SearchVO searchVO = new SearchVO();
    		searchVO.setSeq(seq);
    		EgovMap fileMap = cmmnService.select("file.selectFile", searchVO);  
	        
        	String fileDir, fileName = "";
	        if(fileMap != null) {
				fileDir = (String)fileMap.get("fileStrePathNm");
				fileName = (String)fileMap.get("fileStreNm");
				
		        File file = new File(fileDir, fileName);		        
		        if(file.exists()) {
			        response.setHeader("Content-Type", getServletContext().getMimeType(fileName));
			        response.setHeader("Content-Length", String.valueOf(file.length()));
			        response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");
			        
			        Files.copy(file.toPath(), response.getOutputStream());
		        } else {
		        	fileDir = request.getSession().getServletContext().getRealPath("/WEB-INF/images");
		        	fileName = "noimage.jpg";
		        	
		        	File fileNoImg = new File(fileDir, fileName);
		        	if(fileNoImg.exists()) {
				        response.setHeader("Content-Type", getServletContext().getMimeType(fileName));
				        response.setHeader("Content-Length", String.valueOf(fileNoImg.length()));
				        response.setHeader("Content-Disposition", "inline; filename=\"" + fileNoImg.getName() + "\"");
				        
				        Files.copy(fileNoImg.toPath(), response.getOutputStream());
			        } 
		        }
	        } else {
	        	fileDir = request.getSession().getServletContext().getRealPath("/WEB-INF/images");
	        	fileName = "noimage.jpg";
	        	
	        	File fileNoImg = new File(fileDir, fileName);
	        	if(fileNoImg.exists()) {
			        response.setHeader("Content-Type", getServletContext().getMimeType(fileName));
			        response.setHeader("Content-Length", String.valueOf(fileNoImg.length()));
			        response.setHeader("Content-Disposition", "inline; filename=\"" + fileNoImg.getName() + "\"");
			        
			        Files.copy(fileNoImg.toPath(), response.getOutputStream());
		        } 
	        }
        }catch(Exception ex) {
        	logger.error(ex.getMessage());
        }
    }
}

 

 

html

function bannerFiles() {
    var filesHTML = '';

    $.ajax({
        type: 'POST',
        url: '/dashboard/selectBannerFilesList.json',
        dataType: 'json',
        data: {},
        async: true,
        traditional: true,
        success: function (filesInfo) {
            var arr = filesInfo;

            filesHTML += "<swiper-container class='mySwiper' pagination='true' pagination-clickable='true' navigation='true' space-between='30' centered-slides='true' autoplay-delay='3500' autoplay-disable-on-interaction='false'>";

            arr.forEach(function (obj) {

                // 이미지 업로드 경로
                var encodedImgUri = encodeURI(obj.filePath + obj.fileSaveNm + "." + obj.fileExt); 

                var linkUrl = "";
                if(obj.linkUrl !=  undefined) var linkUrl = obj.linkUrl;

                // 이미지 태그를 생성하고 filesHTML에 추가
                filesHTML += "<swiper-slide>";
                filesHTML += "	<div class='swiper-slide'>";    
                filesHTML += "	   <a href='javascript:void(0)'>";
                filesHTML += "		  <img src='/prevImage/img/view?imgPath=" + encodedImgUri + "' data-url='"+ linkUrl +"' style='width: 100%; height: 100%; object-fit: contain;'>";  
                filesHTML += "	   </a>";
                filesHTML += "	</div>";
                filesHTML += "</swiper-slide>";
            });

            filesHTML += "</swiper-container>";	            
            $("#bannerFiles").html(filesHTML);

            var mySwiper = document.querySelector('.mySwiper').swiper; // slide selector
            mySwiper.on('click', function () {
                 var currentSlide = mySwiper.slides[mySwiper.activeIndex]; // 현재 보고있는 slide
                 var url = $(currentSlide).find('img').attr("data-url"); 
                 //console.log(imgTag);
                 if(url != "" ) openWindow(url);
            }); 
        }
    });
}
728x90

+ Recent posts