아 ㅜ.ㅜ 지난주 누락된줄 모르고 이것저것 건드리다가
결국에는 특정 포스팅들이 맨뒤로 밀려났다...
결국에 기존 포스팅을 삭제하고 새로 작성하기로 마음 먹었다
이번 포스팅에 진행할 내용은 기존에 존재하는 테이블명을 변경을 해보도록 하자
명령어 사용의 예를 들기위해 미리 임시의 테이블을 생성해 보도록 하겠다
MySQL,MSSQL,오라클 한번에 처리하기 위한 포스팅이므로
DBMS 모두 호환되는 테이블을 생성해보도록 하자
생성전 각 DBMS별 테이블명 변경하는 명령어는 다음과 같다
MySQL 테이블명 변경 명령어
ALTER TABLE 기존테이블명 RENAME 바꿀테이블명
MS-SQL 테이블명 변경 명령어
SP_RENAME '기존테이블명', '새로바꿔줄테이블명'
ORACLE 테이블명 변경 명령어
RENAME 기존테이블명 TO 새로바꿔줄테이블명
각 DBMS별로 테이블 변경 명령어는 위와같다
테이블이름 변경을 위한 가상시나리오
회원테이블을 생성하였다 테이블명을 MEMBER_TABLE이라고 가정하려고 했으나
실수로 MMBER_TABLE이라고 생성하였다
이럴경우를 위해 테이블 변경작업이 필요하다
위의 시나리오대로 한번 테이블을 생성해보도록 하자
잘못 만든 테이블 생성하기
CREATE TABLE MMBERTABLE ( ID varchar(20), NAME varchar(20), PASSWORD varchar(20) )
위와같이 잘못생성이 되었으니 각 DBMS별로 MMBERTABLE -> MEMBERTABLE이라고 변경해보도록
하자
MySQL 잘못생성된 테이블 확인
MS-SQL 잘못 생성된 테이블 확인
ORACLE 잘못 생성된 테이블 확인
위와같이 임의의 테이블 'MMBERTABLE' 를 각 DBMS별로 테이블 생성을 완료하였다
이제는 상단에 설명한 테이블이름 변경 명령어들을 적용하여 테이블이름을 변경해보도록 하자
DBMS별 테이블명 변경명령어 적용후 테이블명 확인
MySQL 테이블명 변경명령 적용 후 테이블 확인
MS-SQL 테이블명 변경명령 적용 후 테이블 확인
오라클 테이블명 변경명령 적용후 테이블 확인
오라클,MYSQL,MSSQL 모두 정상적으로 테이블명이 변경되는것을 확인하였다
1. 지속적인 구독을 원하신다면 네이버 이웃추가 부탁드립니다
2. 도움이 되셨다면 공감한번 꾹! 눌러주세요
3. 궁금하신점이 있으시다면 댓글 GOGO
각 DBMS(oracle,mssql,mysql) 별 컬럼,필드 삭제 명령어 (0) | 2014.09.23 |
---|---|
오라클,MySQL,MSSQL 각 DBMS별 컬럼을 추가해보도록 하자 (0) | 2014.09.23 |
(MySQL,MS-SQL,ORACLE) case when then else end 사용하여 조건문 다루기 (0) | 2014.08.24 |
DBMS별(ms-sql vs mysql vs oracle) 문자열 합치기 (0) | 2014.08.18 |
기존 JAVA/JSP 버전을 이용하여 네이버 스마트에디터를 연동법을 소개했었다
이번에는 기존 포스팅 코드를 응용하여 spring 으로 포스팅을 해보도록 하겠다
처음부터 끝까지 상세하게 설명은 하지 않도록 하겠음
기존에 포스팅한 내용을 응용하였기 때문임
우선 스프링 기반의 에디터 구조는 다음과 같다
에디터에 들어있는 파일들은 리소스 파일이므로 /resources/editor 폴더내에 스마트에디터 관련 파일들을 붙여놓았다
스프링의 리소스 연동은 위 포스팅을 참고하도록 하자
다음으로 기본적인 에디터 연동에 대한 포스팅은
해당 포스팅을 참고하도록 하자
물론 include하는 경로는 설정해놓은 path를 적용하도록 하자
본인의 에디터 경로는 다음과 같다
spring 연동시 필수록 있어야 할 pom.xml의 dependency 및 xml 설정
pom.xml 필요 라이브러리
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
mvc-config.xml 파일관련 및 리소스 적용 설정
<mvc:resources mapping="/resources/**" location="/resources/" /> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
/resources/editor/photo_uploader/popup/attach_photo.js 설정
○ callFileUploader 함수 - IE 이하 HTML5 지원 불가 버전을 위한 일반 파일업로드시
필요한 부분 변경
sUrl - 업로드 처리를 해줄 CONTROLLER URL 적용
sCallback - callback.html의 경로 지정
본인의 경우 다음처럼 적용했음
oFileUploader = new jindo.FileUploader(jindo.$("uploadInputBox"),{ sUrl : '/file_uploader', //샘플 켠트롤러입니다. sCallback : '/resources/editor/photo_uploader/popup/callback.html', //업로드 이후에 iframe이 redirect될 콜백페이지의 주소 sFiletype : "*.jpg;*.png;*.bmp;*.gif", //허용할 파일의 형식. ex) "*", "*.*", "*.jpg", 구분자(;) sMsgNotAllowedExt : 'JPG, GIF, PNG, BMP 확장자만 가능합니다', //허용할 파일의 형식이 아닌경우에 띄워주는 경고창의 문구 bAutoUpload : false, //파일이 선택됨과 동시에 자동으로 업로드를 수행할지 여부 (upload 메소드 수행) bAutoReset : true // 업로드한 직후에 파일폼을 리셋 시킬지 여부 (reset 메소드 수행) })
○ html5Upload 함수 URL 변경 - 드래그앤드롭으로 파일첨부가 가능한 함수이다
sUploadURL변수에 본인이 정한 다중파일업로드 처리 컨트롤러 URL을 정의한다
sUploadURL= '/file_uploader_html5'; //upload URL
본인은 위와같이 정해주었다
컨트롤러 + VO에 대한 구조는 다음과 같이 잡아주었으며 각 클래스의 코드는 다음과 같다
/model/Editor.java
public class Editor { private MultipartFile Filedata; public MultipartFile getFiledata() { return Filedata; } public void setFiledata(MultipartFile filedata) { Filedata = filedata; } }
/controller/EditorController.java
○ 일반 파일업로드의 컨트롤러 - /file_uploader
@RequestMapping("/file_uploader") public String file_uploader(HttpServletRequest request, HttpServletResponse response, Editor editor){ String return1=request.getParameter("callback"); String return2="?callback_func=" + request.getParameter("callback_func"); String return3=""; String name = ""; try { if(editor.getFiledata() != null && editor.getFiledata().getOriginalFilename() != null && !editor.getFiledata().getOriginalFilename().equals("")) { // 기존 상단 코드를 막고 하단코드를 이용 name = editor.getFiledata().getOriginalFilename().substring(editor.getFiledata().getOriginalFilename().lastIndexOf(File.separator)+1); String filename_ext = name.substring(name.lastIndexOf(".")+1); filename_ext = filename_ext.toLowerCase(); String[] allow_file = {"jpg","png","bmp","gif"}; int cnt = 0; for(int i=0; i<allow_file.length; i++) { if(filename_ext.equals(allow_file[i])){ cnt++; } } if(cnt == 0) { return3 = "&errstr="+name; } else { //파일 기본경로 String dftFilePath = request.getSession().getServletContext().getRealPath("/"); //파일 기본경로 _ 상세경로 String filePath = dftFilePath + "resources"+ File.separator + "editor" + File.separator +"upload" + File.separator; File file = new File(filePath); if(!file.exists()) { file.mkdirs(); } String realFileNm = ""; SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); String today= formatter.format(new java.util.Date()); realFileNm = today+UUID.randomUUID().toString() + name.substring(name.lastIndexOf(".")); String rlFileNm = filePath + realFileNm; ///////////////// 서버에 파일쓰기 ///////////////// editor.getFiledata().transferTo(new File(rlFileNm)); ///////////////// 서버에 파일쓰기 ///////////////// return3 += "&bNewLine=true"; return3 += "&sFileName="+ name; return3 += "&sFileURL=/resources/editor/upload/"+realFileNm; } }else { return3 += "&errstr=error"; } } catch (Exception e) { e.printStackTrace(); } return "redirect:"+return1+return2+return3; }
○ HTML5 멀티파일업로드 컨트롤러 - /file_uploader_html5
@RequestMapping("/file_uploader_html5") public void file_uploader_html5(HttpServletRequest request, HttpServletResponse response){ try { //파일정보 String sFileInfo = ""; //파일명을 받는다 - 일반 원본파일명 String filename = request.getHeader("file-name"); //파일 확장자 String filename_ext = filename.substring(filename.lastIndexOf(".")+1); //확장자를소문자로 변경 filename_ext = filename_ext.toLowerCase(); //이미지 검증 배열변수 String[] allow_file = {"jpg","png","bmp","gif"}; //돌리면서 확장자가 이미지인지 int cnt = 0; for(int i=0; i<allow_file.length; i++) { if(filename_ext.equals(allow_file[i])){ cnt++; } } //이미지가 아님 if(cnt == 0) { PrintWriter print = response.getWriter(); print.print("NOTALLOW_"+filename); print.flush(); print.close(); } else { //이미지이므로 신규 파일로 디렉토리 설정 및 업로드 //파일 기본경로 String dftFilePath = request.getSession().getServletContext().getRealPath("/"); //파일 기본경로 _ 상세경로 String filePath = dftFilePath + "resources" + File.separator + "editor" + File.separator +"multiupload" + File.separator; File file = new File(filePath); if(!file.exists()) { file.mkdirs(); } String realFileNm = ""; SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); String today= formatter.format(new java.util.Date()); realFileNm = today+UUID.randomUUID().toString() + filename.substring(filename.lastIndexOf(".")); String rlFileNm = filePath + realFileNm; ///////////////// 서버에 파일쓰기 ///////////////// InputStream is = request.getInputStream(); OutputStream os=new FileOutputStream(rlFileNm); int numRead; byte b[] = new byte[Integer.parseInt(request.getHeader("file-size"))]; while((numRead = is.read(b,0,b.length)) != -1){ os.write(b,0,numRead); } if(is != null) { is.close(); } os.flush(); os.close(); ///////////////// 서버에 파일쓰기 ///////////////// // 정보 출력 sFileInfo += "&bNewLine=true"; // img 태그의 title 속성을 원본파일명으로 적용시켜주기 위함 sFileInfo += "&sFileName="+ filename;; sFileInfo += "&sFileURL="+"/resources/editor/multiupload/"+realFileNm; PrintWriter print = response.getWriter(); print.print(sFileInfo); print.flush(); print.close(); } } catch (Exception e) { e.printStackTrace(); } }
위의 각 종류별로 정상 동작하는지 테스트 해보도록 하자
● 기본 단일 파일업로드
● HTML5 를 이용한 에디터 멀티업로드 실행화면
1. 지속적인 구독을 원하신다면 네이버 이웃추가 부탁드립니다
2. 도움이 되셨다면 공감한번 꾹! 눌러주세요
3. 궁금하신점이 있으시다면 댓글 GOGO
한페이지에 스마트에디터 여러개 띄우고 각각 이미지 첨부하기 (2) | 2014.08.20 |
---|---|
스마트에디터(smarteditor)의 싱글/멀티 이미지업로드하기 - JAVA/JSP 버전 (73) | 2014.07.25 |
네이버의 스마트에디터를 연동해보고 서버에 내용을 전달해보자 (12) | 2014.07.17 |
우리는 프로젝트를 진행하면서 스케쥴러(일명 : 크론탭 배치실행) 를 종종 사용할때가 존재한다
보통 어떠한 데이터를 시간이 되면 DB에 insert를 한다던가
혹은 DB정보를 읽어 특정 파일을 생성을 하다던가 등이 존재한다
이러한 경우를 위해 간단하게 샘플을 만들어 보도록 하겠음
이번장은 크론탭 연동만 소개하고 다음 포스팅에는 db연동을 하여
위에 설명한 내용중 하나인 DB내용을 읽어서 파일을 생성하는 내용에 대하여 포스팅 해보도록 하겠다
그럼 세팅을 시작해보도록 하겠음
※ 본인의 포스팅은 STS를 기준으로 작업을 진행하였음
- 프로젝트명 : crontab
- spring version : 3.2.3
생성후 프로젝트 우클릭후 Maven -> Update Project를 해주는거 잊지말자
Tomcat에 생성한 프로젝트를 Add를 해준다음 크론탭 연동을 진행하도록 하겠음
※ 기존 웹프로젝트의 경우는 ContextRoot 설정을 기본으로 잡아주었지만
스케쥴러는 별도의 컨텍스트 설정이 필요없다
위와같이 기본설정이 mvc-config.xml이 잡혀있을텐데 beans 태그를 다음과 같이 변경해주자
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 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/task http://www.springframework.org/schema/task/spring-task-3.1.xsd">
이어 beans 태그내에 다음 코드를 추가하자
<!-- 스케쥴러파일이 존재하는 패키지 설정 --> <context:component-scan base-package="com.crontab" /> <!-- 해당 태그들은 크론탭을 설정에 필요한 태그들 --> <task:scheduler id="jobScheduler" pool-size="10" /> <task:annotation-driven scheduler="jobScheduler" />
위 설정을 잡아다면 다음으로 xml설정 잡은 것처럼 패키지 생성을 하도록 하자
위 구조로 잡아주었다
crontab내에 여러개의 클래스를 잡아서 설정을 잡아 줄수도 있다
but, 본인은 하나의 클래스로만 작업을 ...
이제는 스케쥴러를 돌리기위한 코드를 작성하자
package com.crontab; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class Scheduler { /** * 1. 오후 05:50:00에 호출이 되는 스케쥴러 */ @Scheduled(cron = "0 50 17 * * *") public void cronTest1(){ System.out.println("오후 05:50:00에 호출이 됩니다 "); } /** * 2. 오후 05:51:00에 호출이 되는 스케쥴러 */ @Scheduled(cron = "0 51 17 * * *") public void cronTest2(){ System.out.println("오후 05:51:00에 호출이 됩니다 "); } }
위의 설정한 cron expression은 본인의 현재 시간에대 맞추어 테스트 해보도록 하자
본인은 현재 포스팅 시간대 기준으로 작업을 해본 것이다
예를들어 위 코드에서
"0 51 17 * * *"
라는 코드를 작성하였는데
앞에서부터 설명하자면
"초 분 시 일 월 요일"
이라는 것이다
'*' 이라는 expression은 모두 또는 항상을 의미한다
즉 상단 expression을 설명하면
17시 51분이 되면 해당 스케쥴러 호출이라는 의미다.
일/월/요일에 대해서는 '*' 설정을 잡아 주었으니 "매일 17시 51분이 되면 해당 스케쥴러를 호출하라"
라는 의미가 되는것이다
실행화면을 보도록 하자
상단 코드 작성후 tomcat start를 하고 기다리고 있었다
동작결과 정상적으로 코드 작성한 놈들이 특정 시간에 따라 호출이 정상적으로 되었다
다음 포스팅에는 DB연동을 하여 파일 생성하는 스케쥴러 제작을 진행하겠다
1. 지속적인 구독을 원하신다면 네이버 이웃추가 부탁드립니다
2. 도움이 되셨다면 공감한번 꾹! 눌러주세요
3. 궁금하신점이 있으시다면 댓글 GOGO
스프링3(spring3) 을 이용하면서 쿼츠/배치/스케쥴러 연동하기 -DB연동 (4) | 2014.09.28 |
---|---|
zxing 라이브러리를 이용하여 QR코드/큐알코드/바코드 이미지를 색상별로 생성해보도록 하자 (0) | 2014.08.29 |
class파일내에서 classpath에 존재하는 리소스 파일읽어오기 (0) | 2014.07.30 |
스프링3(Spring3) - 메이븐(maven) pom.xml에서 오라클 JDBC(ojdbc14.jar) 라이브러리 추가하기 (0) | 2014.07.30 |
스프링3(Spring3) - RedirectAttributes를 이용하여 리다이렉트 POST 방식으로 데이터 전송하기 (0) | 2014.07.30 |
이번주가되니 네이버 유입량이 절반이상이 줄어는 현상 발생이 되어 본인과 같은 현상이 발생되는 블로거들을 위해 포스팅한다
내용은 네이버에 티스토리 rss 등록법 + 누락글 신청 두가지 내용이다
저품질이 의심되어 네이버에 본인의 블로그에 대한 글이 정상적으로 검색되는지 확인해봄
강좌형식의 내용을 주로 포스팅 하다보니 비슷한 제목으로 포스팅을 할수밖에 없어서
핵심키워드로 검색을 해보았다
"ExtJS 강좌" 키워드를 찾아봄
검색결과 이상없이 상단에 노출이 잘된다
그렇다면 왜 방문자 수가 확연히 줄었을까?
아무래도 대부분의 글들이 누락이 된거 같다
그렇다면 티스토리의 누락된 글들이 있는지 한번 확인해보도록 하자
누락된글 확인법
티스토리 관리자 페이지에 들어가면
왼쪽 메뉴하단 환경설정 - 데이터관리라는 메뉴가 존재한다
이메뉴를 클릭하도록 하자
데이터 백업이라는 이미지 문구가 있을텐데 이부분을 열어서 첨부파일포함이라는 체크박스 해제후
확인버튼을 클릭한다
그러면 xml파일이 다운로드 되어질 것이다
파일을 받았다면
다음 블로그에가서 누락체크 프로그램을 다운로드 받도록 하자
다운로드를 받은다음 압축해제후
"네이버 누락체크 프로그램.exe" 실행
xml파일 첨부한다음 검색시작 버튼을 클릭
검색시작
원래는 약 80개가량의 글들이 누락되어서 전날 반영신청을 해놓은 상태였는데
대부분 반영이 되었나 보다
그런다음 누락정보 파일로저장이라는 버튼클릭하면
"네이버 누락체크 프로그램.exe" 파일이 있는 경로에 data라는 폴더가 생성되면서
본인의블로그명으로된 폴더 -> 날짜별 txt 파일이 생성되있을 것임
이것이 누락된 데이터목록이다
이제는 신청 하는일만 남았다...
물론 "네이버 누락체크 프로그램.exe" 프로그램에
자동 블로그 검색 자동요청이 존재하나
정확히 어떤식으로 반영이 되는지 몰라
수동 블로그 검색 반영 요청으로 본인은 작업함
수동요청 버튼 클릭을 하게 되면 네이버 고객센터 URL이 나오게 되는데
한번에 5개씩만 신청이 가능하다
그럼 누락된 글들이 성공적으로 네이버에 반영되시길...
※ 위의 수동신청의 경우는 RSS를 네이버에 등록된 상태에서 신청을 해줘야 할것같음
만약 안되있다면 RSS 등록 신청을 먼저 한 다음 누락글들을 등록시켜주도록 하자
RSS등록신청은 프로그램의 수동신청 클릭후 다음 화면따라함
마지막으로 네이버 로그인 후 자신의 이메일을 입력하고 RSS피드 URL1에 본인의 RSS를 등록하면
되겠다. RSS등록방법은 본인의블로그주소/rss 이다
본인의 블로그를 예로 들자면,
"http://roqkffhwk.tistory.com/rss"가 되는셈이다
등록 후 하단 주소로 들어가서 누락된 블로그의 주소를 등록해주도록 하자
1. 지속적인 구독을 원하신다면 네이버 이웃추가 부탁드립니다
2. 도움이 되셨다면 공감한번 꾹! 눌러주세요
3. 궁금하신점이 있으시다면 댓글 GOGO
빅키워드(블로그차트)에서 제공하는 랭킹 위젯을 블로그(네이버,다음,티스토리등..) 적용하여 순위 확인하기 (0) | 2014.08.28 |
---|---|
네이버에서 티스토리외에 타블로그 구독(이웃추가) 방법입니다. (0) | 2014.08.20 |
요즘 ExtJS로 티스토리 스킨 제작중이라 포스팅에 소홀했음...
오늘은 ExtJS에서 어느분께서 HTML5 의 FILE태그중, MULTIPLE 속성을 주어 다중파일 업로드 처리에 대하여 질문해주셔서 한번 선택으로 다중 파일업로드 관련 포스팅을 진행 하겠음..
개념은 FILEFIELD 여러개를 받을수 있는 서버로직이 1차적으로 필요하다.
본인은 SPRING 프레임워크를 이용하여 서버로직을 제작한 후 테스트 하였음
private ArrayList<MultipartFile> uploadFile;
filefield 태그의 name명을 uploadFile이라고 주고 진행을 하겠음
간단하게 기본 폼필드와 단일 파일업로드 관련 샘플링은 다음 글을 참고하면 될듯.
2014/07/02 - [자바스크립트이야기/ExtJS] - [ExtJS강좌 20] 파일컴포넌트를 이용하여 파일업로드를 하자 (xtype : 'fieldfield')
이어서 다중 파일 업로드의 ExtJS 스크립트코드이다 .
Ext.onReady(function(){ var panel = Ext.create('Ext.form.Panel',{ title : '폼패널 - 파일첨부', renderTo : Ext.getBody(), items : [{ xtype : 'filefield', name : 'uploadFile', buttonOnly: true, allowBlank : false, buttonText : '찾아보기', listeners:{ afterrender:function(fileObj){ //파일태그옵션에 multiple이라는 옵션을 정의 fileObj.fileInputEl.set({ multiple:'multiple' }); }, change : function(){ //파일첨부를 다중으로 선택시 열시버튼 누르면 //change 이벤트를 발생시켜 폼 submit! var frm = panel.getForm(); if(frm.isValid()) { frm.submit({ url: '/uploadFile', success : function(fp, res) { var jsonResult = Ext.JSON.decode(res.response.responseText); var msg = "업로드된 파일명<br/>"; Ext.each(jsonResult.fileList,function(obj){ msg += obj.fileName+","; }); msg = msg.substring(0,msg.length-1); Ext.MessageBox.show({ title : '업로드된파일명', msg : msg, buttons : Ext.MessageBox.YES, icon : Ext.MessageBox.INFO }); //한번 submit 처리가 되면 filefield는 초기화 되므로 //다시 filefield에 multiple 속성 설정 panel.down("filefield").fileInputEl.set({ multiple:'multiple' }); } }); } } } }] }) })
기존 단일 파일업로드와 차이가 있다면
1. extjs 파일 컴포넌트내의 file 태그의 속성중 multiple 속성을 설정해주기 위한
afterrender 리스너 등록
2. 파일 버튼에서 태그가 변경시 자동으로 submit 해주는 change 리스너 등록
※ 주의할점은 multiple 속성은 한번 submit을 처리하면 사라지므로 submit이 발생된후에 다시 multiple 설정을 해주어야 함
본인의 submit하는 서버 로직은 다음과 같다.
파일처리는 제외하였다.
어짜피 파일데이터가 넘어가느냐만 확인하기 위한 테스트 로직이므로
로직 사이에 파일처리 하는 로직을 추가로 설정 하면 되겠음.
@RequestMapping(value="/uploadFile", method=RequestMethod.POST) public void uploadFile (FileVo fileVO, HttpServletRequest request, HttpServletResponse response) { //fileVO 안에 다중 파일값을 받기위한 private ArrayList<MultipartFile> uploadFile; 가 존재함 JSONObject jsonObj = null; JSONObject jsonObj2 = null; try { JSONArray jsonArr = new JSONArray(); if(connectionInfo.getUploadFile() != null && connectionInfo.getUploadFile().size() > 0) { /** * 반복분 내에서 파일 처리를 해주면 될것이다. */ for(MultipartFile file : connectionInfo.getUploadFile()) { jsonObj2 = new JSONObject(); jsonObj2.put("fileName", file.getOriginalFilename()); jsonArr.add(jsonObj2); } } jsonObj = new JSONObject(); //form submit에서 json 데이터로 success true 값을 받아야함 jsonObj.put("success", true); jsonObj.put("fileList", jsonArr); } catch (Exception e) { e.printStackTrace(); } finally{ try { response.setContentType("text/plain; charset=UTF-8"); PrintWriter pw = response.getWriter(); pw.print(jsonObj); pw.flush(); pw.close(); } catch (IOException e) {} } }
실행해보도록 하자
최초실행
3가지 이미지파일 선택
form submit 이벤트 발생후 json response를 통해서 받은
업로드 파일명
다시한번 찾아보기 버튼 클릭 후 파일첨부 실행
두번째 파일업로드된 파일명 출력
테스트 결과 잘 나온다.
해당 샘플링을 잘 응용하여 멀티파일 업로드를 처리하도록 하자.
※ IE에서 MULTIPLE 속성은 IE9인가 10부터 지원이 된다고 한다.
잘 사용하도록 하자.
1. 지속적인 구독을 원하신다면 네이버 이웃추가 부탁드립니다
2. 도움이 되셨다면 공감한번 꾹! 눌러주세요
3. 궁금하신점이 있으시다면 댓글 GOGO
[ExtJS강좌 27] 다음(DAUM) 우편번호(주소검색) 서비스 소개 + ExtJS를 이용하여 주소검색 해보기 (0) | 2014.08.25 |
---|---|
[ExtJS강좌 26] 비동기 Ajax 사용하기 - (Ext.Ajax.request) (8) | 2014.08.25 |
[ExtJS강좌 25] MVC 그리드(GridPanel) 를 이용한 CRUD예제 (16) | 2014.07.16 |
[일반 리스트 vs ExtJS 그리드 속도비교] (8) | 2014.07.08 |
[ExtJS강좌 24] MVC 기반으로 컴포넌트 동작시키기 (3) (0) | 2014.07.07 |