์ด๋ฏธ์ง€ ์—…๋กœ๋“œ (Spring+Ajax)

2020. 5. 16. 22:58ยท ๐ŸŒ WEB/Spring

 

Hyper - ํ™˜๊ฒฝ์„ค์ • - ๋ฐฐ๊ฒฝํ™”๋ฉด

 

Hyper ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊ณผ์ • ์ค‘ ์–ด๋ ค์›Œํ–ˆ๋˜ ํŒŒ์ผ ์—…๋กœ๋“œ์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

commons-fileupload๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ  pom.xml์— ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

Ajax๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋‹ˆ Controller์— @ResponseBody๋ฅผ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค ์ด๊ฑฐ ๋˜ํ•œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด

pom.xml์— jackson-mapper๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

pom.xml์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๊ฒƒ. (mvnrepository.com)

1. commons-fileupload

2. jackson-mapper


์ œ์ผ ๋จผ์ € ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ๊ตฌํ˜„ ํ›„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ•˜๊ฒ ๋‹ค.

 

1. spring ํด๋”์—์„œ xxx-context.xml ์— ํŒŒ์ผ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

<!-- MultipartResolver ์„ค์ • -->
	<beans:bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<beans:property name="maxUploadSize" value="2000000" /><!-- 2MB -->
		<beans:property name="maxInMemorySize" value="2000000" />
		<beans:property name="defaultEncoding" value="UTF-8">
		</beans:property>
	</beans:bean>

+ application / servlet -context์˜ ์ฐจ์ด

๋”๋ณด๊ธฐ

 

application / servlet -context์˜ ์ฐจ์ด

์ด ๋‘ ํŒŒ์ผ์˜ ์ฐจ์ด๋Š” applciationContext๋Š” ์ „์ฒด ๊ณ„์ธต๊ตฌ์กฐ์—์„œ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•œ ์ปจํ…์ŠคํŠธ๋กœ

DB ์—ฐ๊ฒฐ, ๋กœ๊น… ๋“ฑ์„ ์ด์šฉํ•œ๋‹ค.

servlet-context๋Š” ์„œ๋ธ”๋ฆฟ์—์„œ๋งŒ ์ด์šฉ๋˜๋Š” ์ปจํ…์ŠคํŠธ์ด๋‹ค.

๋‘ ๊ฐœ์˜ ์ฐจ์ด์  ์ค‘์š”!


2. jspํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค

 

id๊ฐ€ preView์ธ div๊ฐ€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ณด์—ฌ์ค„ ๊ณต๊ฐ„์ด๊ณ 

input์— ์š”์†Œ๋ฅผ type=file๋กœ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. 

 

3. ๊ทธ๋ฆฌ๊ณ  controller์—์„œ ํŒŒ์ผ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด MultipartHttpServletRequest ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์ค˜์•ผ ํ•œ๋‹ค.

์ถ”๊ฐ€๋กœ, Ajax๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— @ResponseBody๋Š” ํ•„์ˆ˜๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด view๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ

JSON์ด๋‚˜ Object๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

4. ํŒŒ์ผ ํ™•์ธ

 

์šฐ์„  getFile๋กœ ์„œ๋ฒ„์— ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

MultipartFile file = mtf.getFile("file");

ํŒŒ์ผ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•ด์ฃผ๊ณ 
boolean isc = file.isEmpty();

 

ํŒŒ์ผ์ด ์—†์„ ๋•Œ๋Š” ์ž„์˜ ๊ฐ’์œผ๋กœ ์—…๋กœ๋“œํ•ด์ค€๋‹ค.

if(isc==true) {
File_Dto fDTO = new File_Dto(user_seq,"","",0);
isk = fService.imageUp(fDTO);
}else {

 

5. ํŒŒ์ผ ์—…๋กœ๋“œ

 

ํŒŒ์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ

}else {
	String oriName = file.getOriginalFilename();
	long fileSize = file.getSize();
	String ext = oriName.substring(oriName.lastIndexOf("."));
	String stoName = UUID.randomUUID()+ext;
	String filePath = mtf.getSession().getServletContext().getRealPath("/upload");
	
    
	File dir = new File(filePath);
		if(!dir.exists()) {
			dir.mkdirs();
			}
			file.transferTo(new File(filePath,stoName));
			logger.info("๊ฒฝ๋กœ : "+filePath+"/"+stoName);
			File_Dto fDTO = new File_Dto(user_seq,oriName,stoName,fileSize);
			isk = fService.imageUp(fDTO);
			map.put("path", filePath+"/"+stoName);
		}
	map.put("isk", isk+"");
	return map;

 

file.getOriginalFilename() : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—…๋กœ๋“œํ•œ ํŒŒ์ผ ์›๋ณธ ์ด๋ฆ„

getSize() : ํŒŒ์ผ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค.

filePath = getSession().getServletContext().getRealPath().getContextPath("/upload")

ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€ ํด๋”๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง€๊ณ  ์™”๋‹ค.

 

Servers์—์„œ server.xml์— ๋งจ ๋ฐ‘ ๋ถ€๋ถ„์„ ๋ณด๋ฉด

 

 

 

<Context docBase="์‹ค์ œ ์ €์žฅ๋˜๋Š” ํŒŒ์ผ์˜ ์œ„์น˜๊ฒฝ๋กœ" path="์„œ๋ฒ„์—์„œ ์ฐพ๋Š” ํŒŒ์ผ์˜ ๊ฒฝ๋กœ" reloadreloadable="true"/>๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์˜ˆ)

<Context docBase="C:\Users\aejeong\Programming\workspace\org.eclipse.wst.server.core\temp0\wtpwebapps\Hyper\upload" path="/Hyper/upload" reloadreloadable="true" />

์ด๋Ÿฐ ์‹์œผ๋กœ ์„ค์ •์„ ํ•ด๋†“์œผ๋ฉด /Hpyer/upload ๋ผ๋Š” ๊ฒฝ๋กœ๋ฅผ docBase์— ์„ค์ •ํ•œ ๊ฒฝ๋กœ์—์„œ ์ฐพ๊ฒŒ ๋œ๋‹ค.

 

 

dir.mkdirs() ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ

transferTo ์›ํ•˜๋Š” ์œ„์น˜์— ์ €์žฅํ•ด์ค€๋‹ค. InputStream์„ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ ํŽธํ•˜๋‹ˆ๊นŒ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

File_Dto ์•ˆ์— ์žˆ๋Š” ์ปฌ๋Ÿผ๋ช…

 

 

6. Ajax ์‚ฌ์šฉ

function ajaxFileUpload() {

    var form = jQuery("#fileForm")[0];
    var formData = new FormData(form);

    jQuery.ajax({
          url : "./imageIn"
        , type : "POST"
        , processData : false
        , contentType : false
        , data : formData
        , success:function(map) {
        }
    });
}

 

processData : ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ€์ง€์— ๋Œ€ํ•œ ๊ฐ’ true=์ผ๋ฐ˜๋ฌธ์ž/ false=๋ฐ์ดํ„ฐ๊ฐ์ฒด

contextType : ์ผ๋ฐ˜ text์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ’ true์ด๋ฉด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

data : var formData = new FormData(form)์—์„œ์˜ ๋ณ€์ˆ˜๋ช…์„ ์จ์ฃผ๋ฉด ๋œ๋‹ค.

 

ํŒŒ์ผ ์—…๋กœ๋“œ๋Š” ์™„์„ฑ! ๋‹ค์Œ์€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค!

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ

'๐ŸŒ WEB > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Spring ์ด์ •๋ฆฌ 2.Spring 3๋Œ€ ์ž‘๋™์›๋ฆฌ  (0) 2020.06.06
Spring ์ด์ •๋ฆฌ 1.Spring์— ๊ธฐ๋ฐ˜์ด ๋˜๋Š” Servlet  (0) 2020.06.06
์„ธ์…˜ ์ €์žฅ์†Œ  (0) 2020.04.29
Spring Security , OAuth2.0์œผ๋กœ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ 1  (0) 2020.04.15
JPA Auditing ์œผ๋กœ ์ƒ์„ฑ/์ˆ˜์ •์‹œ๊ฐ„ ์ž๋™ํ™”ํ•˜๊ธฐ  (0) 2020.04.14
'๐ŸŒ WEB/Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Spring ์ด์ •๋ฆฌ 2.Spring 3๋Œ€ ์ž‘๋™์›๋ฆฌ
  • Spring ์ด์ •๋ฆฌ 1.Spring์— ๊ธฐ๋ฐ˜์ด ๋˜๋Š” Servlet
  • ์„ธ์…˜ ์ €์žฅ์†Œ
  • Spring Security , OAuth2.0์œผ๋กœ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ 1
์• ์ •์“ฐ
์• ์ •์“ฐ
์• ์ •์“ฐ
์• ์ •์ฝ”๋”ฉ ๐Ÿ’ป
์• ์ •์“ฐ
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (93)
    • ๐Ÿง  MIND (0)
    • ๐Ÿ“ ํšŒ๊ณ  (5)
    • โš™๏ธ ๋ฐฐํฌ ๋ฐ ์ธํ”„๋ผ (2)
    • ๐Ÿ—‚๏ธ DataBase (1)
      • QUERY (1)
    • ๐Ÿ’ป Computer Science (12)
    • ๐ŸŒ WEB (62)
      • HTML,CSS (0)
      • Kotlien (1)
      • JAVA (20)
      • JavaScript (3)
      • Spring (16)
      • Thymeleaf (2)
      • Node.js (1)
      • React (2)
      • SETTING (3)
      • JPA (11)
    • ๐Ÿœ TESTING (3)
    • ๊ธฐํƒ€ (4)
    • ์—๋Ÿฌ๋ชจ์Œ (4)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Java
  • ์ฝ”ํ…Œ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Setting
  • ๋ฐฑ์ค€
  • null์ œ์™ธ
  • ์ง๋ ฌํ™”
  • max_digest_length
  • 6์›”ํšŒ๊ณ 
  • XSSFWorkbook
  • ๊ฐœ๋ฐœ์žํšŒ๊ณ 
  • ์ธํ„ฐ๋ทฐ
  • Gson null
  • Spring
  • ์„œ๋น„์Šคํ…Œ์ŠคํŠธ
  • Til
  • QueryDSL
  • ์ž๋ฐ”
  • spring-boot
  • ๊ธฐ์ดˆ
  • ArgumentCaptor
  • ๊ฐœ๋ฐœ์ž
  • ๋™์ ํ”„๋ก์‹œ
  • ๋ฉ”์„œ๋“œํ…Œ์ŠคํŠธ
  • JWT
  • enum
  • ํŒŒ์ด์ฌ
  • ํšŒ๊ณ 
  • rdsํŒŒ๋ผ๋ฏธํ„ฐ
  • JPA

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.1
์• ์ •์“ฐ
์ด๋ฏธ์ง€ ์—…๋กœ๋“œ (Spring+Ajax)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.