-- JSP
<form id="sin_send_form" name="sin_send_form" method="post" enctype="multipart/form-data" action="/admin/upload_process.do">
<input type="hidden" name=mode value="update">
<table width='98%' align='center' id='list_table' class='table_in_border'>
<tr>
<th class="pl">파일 - ${URI}</th>
<td class="tl">
<input type="text" name="bbs_name" id="bbs_name" style="width:80%">
<input type="file" name="file" id="file" style="width:80%" multiple>
</td>
</tr>
<tr>
<th class="pl"> </th>
<td class="tl">
<button type=submit class="btn btn-small btn-success" style='width:160px;'> 저장 </button>
</td>
</tr>
</table>
</form>
-- JAVA
// Map + File Upload 패턴
@RequestMapping(value = {"/upload_ajax_process.do", "/admin/upload_process.do"}, method = { RequestMethod.POST, RequestMethod.GET })
public String upload_process
(
ModelMap model
, HttpServletRequest request
, HttpServletResponse response
, HttpSession session
, @RequestParam Map params
, com_file_array cfa
)
throws Exception
{
logger.debug( "●● upload_process ●●");
logger.debug( "●● params : " + params.get("mode") );
// common control
String URI = request.getRequestURI();
boardService.bbs_board_list_ajax(params);
/*
* @ File Upload
* @ Param : file
*/
List<MultipartFile> files = cfa.getFile();
List<String> fileNames = new ArrayList<String>();
logger.debug("●●-> 오브젝트 : " + files ); // 파일 오브젝트
logger.debug("●●-> 업로드 파일 개수 : " + files.size()); // 업로드 파일 개수
int pos = 0; // index of
String ext = null; // 업로드 된 파일의 혹장자
String real_filename = null; // DB에 실제 들어가는 파일명
String fileName = null; // 업로드 된 파일명
long r_time = 0; //
int r_count = 0; //
String file_rand_name = null;
// 파일이 존재하는 경우만 적용
if ( files.size() > 0 )
{
String path1 = "C:/upload_real/"; // 메인 업로드 디렉토리
String path2 = "C:/upload_db/"; // 백업 업로드 디렉토리
// multiple upload - loop
for (MultipartFile multipartFile : files)
{
fileName = multipartFile.getOriginalFilename();
fileNames.add(fileName);
pos = fileName.lastIndexOf( "." ) ; // 순서
ext = fileName.substring( pos + 1 ) ; // 확장자
r_time = System.currentTimeMillis() ; // 난수용 날짜
r_count = (int)(Math.random()*1000000) ; // 난수용 번호
file_rand_name = (String) (r_time + "_" + r_count); // 난수 파일명 생성
real_filename = file_rand_name + "." + ext ; // 사업자번호로 변경된 파일명 생성
// 파일 공통 테이블 입력 (변동)
logger.debug("●●-> fileName : " + fileName);
File uFile = new File( path1 + fileName ); // 실제 파일 위치
try
{
logger.debug("●●-> 원래파일 : " + path1 + fileName);
multipartFile.transferTo(uFile); // 파일 저장
logger.debug("●●-> 복사파일 : " + path2 + real_filename );
File tFile = new File( path2 + real_filename );
CommonUtil.FileCopy( uFile, tFile ); // source file , target file
}
catch (IOException e)
{
logger.debug( "●●-> IOException : " + e );
}
}
}
logger.debug( "●●-> 원래 파일명 : " + "R" + fileName + "_000001" );
return "redirect:" + "/admin/upload.do?URI=" + URI;
}
-- com_file_array.java (VO)
package com.erp.vo;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
import com.erp.vo._common_field;
public class com_file_array
{
/*
* @ com_file_array - FILE
*/
private int mna_num ; // 등록번호
private int mno_num_key ; // 해당번호
private String mna_type ; // 해당코드
private String mna_part ; // 종류
private int mna_position ; // 출력순서
private String mna_view ; // 승인유무
private String mna_file ; // 파일
private String mna_file_org ; // 파일제목
private List<MultipartFile> file; // 파일 업로드 - multiple (전체공통)
.
. 생략 ( getter & setter )
.
}
|