File Upload / Download
-
Upload
anjelita-ortiz -
Category
Documents
-
view
73 -
download
5
description
Transcript of File Upload / Download
File Upload / Download
FORMSUBMIT
AJAX
A Con-troller
B Con-troller
Service Dao
NAS DB
ㅇ 필요 라이브러리 - commons-fileupload.jar
- commons-io.jar
- jquery.form.js
File Upload / Download
ㅇ DB Table
ㅇ 프로젝트 전체 구조
File Upload / Download
ㅇ Package 구조
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>
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 -->
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>
/WEB-INF
config.properties
db.driver=oracle.jdbc.driver.OracleDriverdb.url=jdbc:oracle:thin:@localhost:1521:xedb.id=scottdb.pw=tiger
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;
}
/* 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)
/* 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)
Package : mvc/spring/service
FileService
public interface FileService {public boolean uploadFile(MultipartRequest mRequest);public List<Map<String, Object>> getFileList(Map<String, Object> map);
}
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();}
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)
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)
@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)
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
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;}
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;}
}
/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>
/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>
/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>
/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>
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();
}}