---- script ----
<script type="text/javascript">
function ajaxFileUpload()
{
var form = $("#ajaxFrom")[0];
var formData = new FormData(form);
// ajax + file upload 는 serialize 가 불가합니다!!!
// formData.append( "file" , $("#ajaxFile" )[0].files[0]);
formData.append( "file" , $("#ajaxFile" ).get(0).files[0] ); 2개 모두 가능
formData.append( "bbs_subject" , $("#bbs_subject ").val() ); //
formData.append( "bbs_contents", $("#bbs_contents").val() ); //
formData.append( "bbs_id" , $("#bbs_id ").val() ); //
formData.append( "bbs_code" , $("#bbs_code ").val() ); //
formData.append( "bbs_name" , $("#bbs_name ").val() ); //
alert(formData);
alert(formData.bbs_name);
jQuery.ajax(
{
url : "/admin/upload_process.do"
, type : "POST"
, processData : false
, contentType : false
, data : formData
, success : function(json) {
var obj = JSON.parse(json);
alert( obj.bbs_code )
}
});
}
</script>
---- html----
<!-- enctype="multipart/form-data" 필요 없음!!! -->
<form id="ajaxFrom" method="post">
<input type="text" id="mode" value="insert"/>
<input type="text" id="bbs_name" value="test good!!!"/>
<input type="file" id="ajaxFile" multiple/>
<button class="w2ui-btn" onClick="ajaxFileUpload();"> 업로드 </button>
</form>
---- java controller ----
// 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( "●● mode : " + params.get("mode") );
logger.debug( "●● bbs_name : " + params.get("bbs_name") );
// common control
String URI = request.getRequestURI();
boardService.bbs_board_list_ajax(params); // CRUD process 작성
/*
* @ 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;
}
|