======================
Controller-1.파일 읽기 /readFileId.do
======================
▽
======================
(파일 개수만큼 반복)
Controller-2.파일 업로드 /processUpload.do
======================
▽
============================
Controller-3.업로드 완료 /afterProcessUploadCompleted.do
============================
▽
============================
Controller-5.파일 ID로 첨부파일 목록 읽기 /readDownloadFiles.do
============================
JSP에서는 <jwork:fileuploader의 태그를 이용해 UI를 구성하게 된다.
<jwork:fileuploader
// 해당 두 개는 현재 jsp에서 사용할 임시 이름이다.
objectId="fileUploadObj1"
uploadCompletedEvent="uploadCompleted1"
// 화면을 그릴때 options 있다면 적용된다
fileType="all"
maxFileSize="10000"
maxFileCount="30"
usePreview="true"
useSecurity="false"
uploadMode="db"
/>
시작은 fileUploadObj1.startUpload();
업로드가 마치면, fileUploadObj1.refresh();가 작동한다.
startUpload()는 전송(업로드를 한다.)을 누르기 까지의 과정이다.
refresh()은 업로드 한 파일리스트를 바로 불러와 다운로드와 삭제 기능을 하게 해준다.
startUpload()는 jwork.fileUpload.js에 속한다.
업로드 링크를 누를 경우, 화면을 구성하는 jwork.fileUpload()의 함수들이 실행된다.
<jwork>
initProperties(ctx) : ctx루트명으로 값을 초기화한다.
▽
setOptions(options) : 옵션들이 있다면 맞게 초기화 시켜준다.
▽
initHtml() : 화면을 구성해준다. @RequestMapping("/jfile/jfileuploadForm.do")
▽
<Swf>
initSwf() : Swf 초기화 및 셋팅을 한다. (adobe flash player)
▽
getSettings() : SwfUpload가 요구하는 options 값들을 반환시켜준다.
▽
getFileTypeForSwfUpload() : File 타입 값 반환
▽
getFileTypeDescForSwfUpload() : File 타입 값에 대한 설명 반환
다음과 같이 화면을 그린 후 파일을 그리는 함수가 실행된다.
appendFileRow() : 파일 추가시 컴포넌트 화면에 Html로 그려진다.
다음은 전송을 누를 경우 업로드에 해당되는 함수들이 실행된다.
@RequestMapping("/jfile/readFileId.do")
fileId~uploadPathKey의 데이터들을 전달한다.
service.getFileId(fileVO.getFileId(),request.getParameterValues("fileSeq")); // "" , null
fileId는 ""로 전달되며 Service에서 seq형태로 생성시켜준다.
fileId가 null이거나 ""이면 seq형태로 생성, 존재한다면 seq들은 모두 처음 fileId형태를 따라간다.
만들어진 fileId는 StartUpload의 this.fileId에 대입된다.
filedId와 이하 변수들은 this.swfu.addPostParam("이름", this.값); 으로 들어간다.
ex)
@@@@@@ startUpload @@@@@@@
fileId : 173b85c25c16
beanId : null
uploadPathKey :
useSecurity :
uploadMode : db
다음과 같은 예시로 들어가게 된다.
이제 startUpload()가 실행된다.
swfu.startUpload()
swfu는 flash player로 자동으로 file에 대한 정보들을 가져오는 것으로 생각된다.
jwork에서는 handler를 통해 swfu에 있는 메서드를 이용하여 다루고 있다.
실행순서)
swfu.queue : [업로드 시작 -> 업로드 상태 -> 업로드 성공 -> 업로드 완료]
다루는 객체 file
ex)
file : {
"id":"SWFUpload_0_0",
"type":".jpg",
"uploadtype":0,
"size":27607,
"index":0,
"name":"dog1.jpg",
"post":{},
"creationdate":{},
"filestatus":-2,
"modificationdate":{}
}
업로드할 파일이 더이상 존재하지 않다면
[ 업로드 마침 ]이 실행된다.
업로드 마침
@RequestMapping("/jfile/afterProcessUploadCompleted.do")
마친 후 다운로드 및 삭제 아이콘에 대한 impl 기능들이 되게 해준다.
refresh()
초기 화면 구성과 동일하며,
if( fileId 가 존재할 경우 )
getFileList()로 서버에 저장되어 있는 파일 리스트를 가져온다.
fileId : 173b85c25c16
beanId : null
uploadPathKey :
useSecurity :
uploadMode : db
해당 정보들을 body에 담아 전송하여,
@RequestMapping("/jfile/readDownloadFiles.do")
해당 경로로 요청하여, fileList를 받아온다.
fileList의 형태는 service.getAttachFiles( "파일 아이디" ) 로 받아 올 수 있는데,
SQL문에 받아 온 fileId를 조건식에 넣어 동일 데이터를 가져오는 방식이었다.
받아 온 fileList는 fileUpload.insertFileList(result.filelist); 로 넘겨지게 되며, appendFileRow()로 파일들을 그려주게 된다.
이곳에서는 fileSeqList에 [1] = seq1, [2] = seq2 .... 이렇게 저장되고 있는데
remove처리를 위해 시퀀스를 임시 저장하고 있는 것을 알 수 있었다.