23
File Upload / Download FORM SUBMIT AJAX A Controlle r B Controlle r Service Dao NAS DB

File Upload / Download

Embed Size (px)

DESCRIPTION

File Upload / Download. FORM SUBMIT. A Controller. Service. Dao. AJAX. B Controller. NAS. DB. File Upload / Download. ㅇ 필요 라이브러리 - commons-fileupload.jar - commons-io.jar - jquery.form.js. ㅇ DB Table. File Upload / Download. ㅇ 프로젝트 전체 구조. ㅇ Package 구조. - PowerPoint PPT Presentation

Citation preview

Page 1: File  Upload / Download

File Upload / Download

FORMSUBMIT

AJAX

A Con-troller

B Con-troller

Service Dao

NAS DB

Page 2: File  Upload / Download

ㅇ 필요 라이브러리 - commons-fileupload.jar

- commons-io.jar

- jquery.form.js

File Upload / Download

ㅇ DB Table

Page 3: File  Upload / Download

ㅇ 프로젝트 전체 구조

File Upload / Download

ㅇ Package 구조

Page 4: File  Upload / Download

dispatcher-servlet.xml (1 / 3)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:util="http://www.springframework.org/schema/util"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

<context:component-scan base-package="mvc.spring" />

<bean id="viewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" />

</bean>

Page 5: File  Upload / Download

dispatcher-servlet.xml (2 / 3)

<!-- MessageConverter --><bean class="org.springframework.web.servlet.mvc.annotation.

AnnotationMethodHandlerAdapter"><property name="messageConverters">

<list><bean

class="org.springframework.http.converter. StringHttpMessageConverter" />

<bean class="org.springframework.http.converter.json. MappingJacksonHttpMessageConverter" />

</list></property>

</bean><!-- MessageConverter -->

<!-- Multipart Resolver --><bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- maximum file size in bytes 50MB --><property name="maxUploadSize" value="52428800" />

</bean><!-- Multipart Resolver -->

Page 6: File  Upload / Download

dispatcher-servlet.xml (3 / 3)

<!-- Properties --><util:properties id="config"

location="/WEB-INF/config.properties" /><!-- Properties -->

<!-- Data Source --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="#{config['db.driver']}" />

<property name="url" value="#{config['db.url']}" /><property name="username" value="#{config['db.id']}" /><property name="password" value="#{config['db.pw']}" />

</bean><!-- Data Source -->

<!-- Jdbc Template --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<constructor-arg ref="dataSource" /></bean><!-- Jdbc Template -->

</beans>

Page 7: File  Upload / Download

/WEB-INF

config.properties

db.driver=oracle.jdbc.driver.OracleDriverdb.url=jdbc:oracle:thin:@localhost:1521:xedb.id=scottdb.pw=tiger

Page 8: File  Upload / Download

Package : mvc/spring/controller

FileController(1 / 3)

@Controllerpublic class FileController {

@AutowiredFileService fileService;

/* submit file upload form */@RequestMapping(value="fileUpload.do", method=RequestMethod.GET)public ModelAndView fileUploadForm() {

ModelAndView mav = new ModelAndView();mav.setViewName("file/fileUpload_submit");return mav;

}/* submit file upload */@RequestMapping(value="fileUpload.do", method=RequestMethod.POST)public ModelAndView fileUpload(MultipartRequest mRequest) {

ModelAndView mav = new ModelAndView();boolean result = fileService.uploadFile(mRequest);mav.addObject("result", result);mav.setViewName("file/fileUpload_result");return mav;

}

Page 9: File  Upload / Download

/* ajax file upload form */@RequestMapping(value="fileUploadAjax.do", method=RequestMethod.GET)public ModelAndView fileUploadAjaxForm() {

ModelAndView mav = new ModelAndView();View view = new InternalResourceView(

“/WEB-INF/views/file/fileUpload_ajax.jsp");mav.setView(view);return mav;

}

/* ajax file upload */@RequestMapping(value="fileUploadAjax.do", method=RequestMethod.POST)@ResponseBodypublic Map<String, Object> fileUploadAjax(MultipartRequest mRequest) {

boolean result = fileService.uploadFile(mRequest);Map<String, Object> map = new HashMap<String, Object>();map.put("result", result);return map;

}

Package : mvc/spring/controller

FileController(2 / 3)

Page 10: File  Upload / Download

/* file download */@RequestMapping("fileDownload.do")public ModelAndView fileDownload(@RequestParam("seqNo") String seqNo,

@RequestParam("num") String num) {ModelAndView mav = new ModelAndView();Map<String, Object> map = new HashMap<String, Object>();map.put("seqNo", seqNo);map.put("num", num);List<Map<String, Object>> list = fileService.getFileList(map);Map<String, Object> data = new HashMap<String, Object>();String fileName = (String) list.get(0).get("DSP_FILE_NAME");String filePath = list.get(0).get("FILE_PATH") + File.separator +

list.get(0).get("FILE_NAME");File file = new File(filePath);data.put("file", file);data.put("fileName", fileName);mav.addObject("data", data);

mav.setView(new FileDownloadView());

return mav;}

}

Package : mvc/spring/controller

FileController(3 / 3)

Page 11: File  Upload / Download

Package : mvc/spring/service

FileService

public interface FileService {public boolean uploadFile(MultipartRequest mRequest);public List<Map<String, Object>> getFileList(Map<String, Object> map);

}

Page 12: File  Upload / Download

Package : mvc/spring/service

FileServiceImpl (1 / 4)

@Servicepublic class FileServiceImpl implements FileService {

@AutowiredFileAtchDao fileAtchDao;

@Overridepublic boolean uploadFile(MultipartRequest mRequest) {

boolean isSuccess = false;

String uploadPath = "/spring/upload";

File dir = new File(uploadPath);if(!dir.isDirectory()) {

dir.mkdirs();}

Page 13: File  Upload / Download

Iterator<String> iter = mRequest.getFileNames();while(iter.hasNext()) {

// HTML input tag nameString htmlName = iter.next();

// Multipart FileMultipartFile mFile = mRequest.getFile(htmlName);

// Original File nameString oFileName = mFile.getOriginalFilename();

// Save File nameString saveFileName = oFileName;

// Save File sizelong fileSize = mFile.getSize();

String realFilePath = uploadPath + File.separator + saveFileName;if(!saveFileName.equals("") && new File(realFilePath).exists()) {

saveFileName = saveFileName + "_" + System.current-TimeMillis();

realFilePath = uploadPath + File.separator + saveFileName;}

Package : mvc/spring/service

FileServiceImpl (2 / 4)

Page 14: File  Upload / Download

try {Map<String, Object> map = new HashMap<String,

Object>();map.put("seqNo", 1);map.put("filePath", uploadPath);map.put("fileName", saveFileName);map.put("dspFileName", oFileName);map.put("fileSize", fileSize);

fileAtchDao.insertFileAtch(map);mFile.transferTo(new File(realFilePath));isSuccess = true;

} catch (IllegalStateException e) {e.printStackTrace();

} catch (IOException e) {e.printStackTrace();

}}return isSuccess;

}

Package : mvc/spring/service

FileServiceImpl (3 / 4)

Page 15: File  Upload / Download

@Overridepublic List<Map<String, Object>> getFileList(Map<String, Object> map) {

List<Map<String, Object>> list = fileAtchDao.selectFileAtch(map);return list;

}}

Package : mvc/spring/service

FileServiceImpl (4 / 4)

Page 16: File  Upload / Download

public interface FileAtchDao {public boolean insertFileAtch(Map<String, Object> map);public List<Map<String, Object>> selectFileAtch(Map<String, Object> map);

}

Package : mvc/spring/dao

FileAtchDao

Page 17: File  Upload / Download

Package : mvc/spring/dao

FileAtchDaoImpl (1 / 2)

@Repositorypublic class FileAtchDaoImpl implements FileAtchDao {

@AutowiredJdbcTemplate template;

@Overridepublic boolean insertFileAtch(Map<String, Object> map) {

StringBuffer sql = new StringBuffer();sql.append("INSERT INTO FILE_ATCH");sql.append(" (NUM, SEQ_NO, FILE_PATH, FILE_NAME,

DSP_FILE_NAME,

FILE_SIZE)");sql.append(" VALUES ");sql.append(" ((SELECT NVL(MAX(TO_NUMBER(NUM)), 0) + 1 FROM

FILE_ATCH), ?, ?, ?, ?, ?) ");

int result = template.update(sql.toString(), map.get("seqNo"),map.get("filePath"), map.get("fileName"), map.get("dspFileName"), map.get("fileSize"));

return result > 0 ? true : false;}

Page 18: File  Upload / Download

Package : mvc/spring/dao

FileAtchDaoImpl (2 / 2)

@Overridepublic List<Map<String, Object>> selectFileAtch(Map<String, Object> map) {

StringBuffer sql = new StringBuffer();sql.append("SELECT NUM, SEQ_NO, FILE_PATH");sql.append(" , FILE_NAME, DSP_FILE_NAME, FILE_SIZE");sql.append(" FROM FILE_ATCH");sql.append(" WHERE NUM = ? AND SEQ_NO = ?");List<Map<String, Object>> list =

template.queryForList(sql.toString(), map.get("num"), map.get("seqNo"));

return list;}

}

Page 19: File  Upload / Download

/WEB-INF/views/file

fileUpload_submit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title> 파일 업로드 화면 </title></head><body>

<form action="./fileUpload.do" method="post" enctype="multipart/form-data">파일첨부 1 : <input type="file" name="file1" /><br />파일첨부 2 : <input type="file" name="file2" /><br />파일첨부 3 : <input type="file" name="file3" /><br /><input type="submit" value="upload" />

</form>

</body></html>

Page 20: File  Upload / Download

/WEB-INF/views/file

fileUpload_ajax.jsp (1 / 2)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title> 파일 업로드 화면 </title><script src="http://code.jquery.com/jquery-1.11.0.min.js"></script><script src="./js/jquery.form.js"></script><script>

$(document).ready(function() {$("input[type=submit]").bind("click", function() {

$("form").ajaxSubmit({success : function(data) {

alert(data.result);},error : function(error) {

alert(" 요청 처리 중 오류가 발생하였습니다 .");}

});return false;

});});

</script></head>

Page 21: File  Upload / Download

/WEB-INF/views/file

fileUpload_ajax.jsp (2 / 2)

<body><form action="./fileUploadAjax.do" method="post" enctype="multipart/form-

data">파일첨부 1 : <input type="file" name="file1" /><br />파일첨부 2 : <input type="file" name="file2" /><br />파일첨부 3 : <input type="file" name="file3" /><br /><input type="submit" value="upload" />

</form></body></html>

Page 22: File  Upload / Download

/WEB-INF/views/file

fileUpload_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8“ pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title> 파일 업로드 결과 </title></head><body>

<h1>${result}</h1></body></html>

Page 23: File  Upload / Download

Package : mvc/spring/view

FileDownloadView

public class FileDownloadView extends AbstractView {@Overrideprotected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Excep-

tion {Map<String, Object> data = (Map<String, Object>)

model.get("data");File file = (File) data.get("file");String oFileName = (String) data.get("fileName");

response.setContentType(this.getContentType());response.setContentLength((int)file.length());response.setHeader("Content-Disposition", "attachment; filename=\""

+ java.net.URLEncoder.encode(oFileName, "UTF-8") + "\";charset=\"UTF-8\"");response.setHeader("Content-Transfer-Encoding", "binary");response.setHeader("Pragma", "no-cache");

OutputStream out = response.getOutputStream();FileInputStream in = null;in = new FileInputStream(file);FileCopyUtils.copy(in, out);out.close();out.flush();

}}