web developer๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

[AJAX] ๋‹ค์ค‘ fileupload / formData ์ด์šฉํ•˜์—ฌ JSON ํŒŒ๋ผ๋ฏธํ„ฐ ๋„˜๊ธฐ๊ธฐ & ํŒŒ์ผ์—…๋กœ๋“œ ๊ตฌํ˜„ ๋ณธ๋ฌธ

js

[AJAX] ๋‹ค์ค‘ fileupload / formData ์ด์šฉํ•˜์—ฌ JSON ํŒŒ๋ผ๋ฏธํ„ฐ ๋„˜๊ธฐ๊ธฐ & ํŒŒ์ผ์—…๋กœ๋“œ ๊ตฌํ˜„

natrue 2021. 10. 22. 21:24
728x90
 

[jQuery] ํŒŒ์ผ ์—…๋กœ๋“œ input type = 'file' ๋‹ค์ค‘์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ

html ์ถ”๊ฐ€ js var maxAppend = 1; $('.__add ._add').on('click',function(){ if(maxAppend >= 3){ alert("ํŒŒ์ผ ์—…๋กœ๋“œ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ ์ž…๋‹ˆ๋‹ค."); return; }else{ $('.__add').append(' ์‚ญ์ œ '); maxAppend ++;..

truecode-95.tistory.com

 html  

  js  

file์€ JSON์— ํฌํ•จ๋  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ FormData ์•ˆ์— file๊ณผ JSON (= data)๋ฅผ append ์‹œํ‚จ๋‹ค.

//FormData ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ 
var formData = new FormData();
// ๋„˜๊ธธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์ค€๋‹ค. 
var data = {   
    "userId"    : $("#userId").val(),
    "title"     : $("#title").val(),
    "contents"  :  $("#contents").val()
}

// input class ๊ฐ’ 
var fileInput = $('.files');
// fileInput ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
for (var i = 0; i < fileInput.length; i++) {
	if (fileInput[i].files.length > 0) {
		for (var j = 0; j < fileInput[i].files.length; j++) {
			console.log(" fileInput[i].files[j] :::"+ fileInput[i].files[j]);
			
			// formData์— 'file'์ด๋ผ๋Š” ํ‚ค๊ฐ’์œผ๋กœ fileInput ๊ฐ’์„ append ์‹œํ‚จ๋‹ค.  
			formData.append('file', $('.files')[i].files[j]);
		}
	}
}

// 'key'๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์œ„์—์„œ ๋‹ด์€ data๋ฅผ formData์— appendํ•œ๋‹ค. type์€ json  
formData.append('key', new Blob([ JSON.stringify(data) ], {type : "application/json"}));

// ajax ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ * 
$.ajax({
      url: 'url',
      data: formData,
      contentType: false,               // * ์ค‘์š” *
      processData: false,               // * ์ค‘์š” *
      enctype : 'multipart/form-data',  // * ์ค‘์š” *
      success: function(data) {
        if (result.SUCCESS == true) {
         alert("์„ฑ๊ณต");
        } else {
         alert("์‹คํŒจ");
         }
      }
});

- contentType : false ๋กœ ์„ ์–ธ ์‹œ content-type ํ—ค๋”๊ฐ€ multipart/form-data๋กœ ์ „์†ก๋˜๊ฒŒ ํ•จ

- processData : false๋กœ ์„ ์–ธ ์‹œ formData๋ฅผ string์œผ๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์Œ

 

  service  

public void insertMypageQna(Map<String, Object> param,  List<MultipartFile> fileList) throws Exception {
    boardMapper.insertMypageQna(param);
    List<Map<String,Object>> list = fileutils.fileUpload(param, fileList);
    
    if(list!=null){
      for(int i = 0; i < list.size(); i++){
     	 boardMapper.insertFile(list.get(i));
      }
    }
}

  xml  

<insert id="insertFile" parameterType="map">
    INSERT INTO COMMONFILES(
        file_no,
        board_no,
        original_file_name,
        stored_file_name,
        file_size,
        create_date,
        create_user,
        del_y_n
        )
    VALUES(
        NEXTVAL('file_no'),
        #{boardNo},
        #{originalFileName},
        #{storedFileName},
        #{fileSize},
        current_timestamp,
        #{createUser},
        'N'
        )   
</insert>

  controller  

@RequestMapping(value="/insertMypageQna.do", method=RequestMethod.POST)
@ResponseBody
  public Map<String, Object> insertMypageQna(
  @RequestPart(value = "key") Map<String, Object> param,
  @RequestPart(value = "file",required = false) List<MultipartFile> fileList) throws Exception {
  
  Map<String, Object> result = new HashMap<String, Object>();
  
   bservice.insertBoard(param,fileList);
   result.put("SUCCESS", true);
   
  // result๋ฅผ return ํ•˜๋ฉด ajax success์—์„œ result.SUCCESS == true๋กœ if๋ฌธ ์‚ฌ์šฉ๊ฐ€๋Šฅ
  return result;
}

  globals. properties  

 

# ํŒŒ์ผ ์—…๋กœ๋“œ ๊ฒฝ๋กœ(๊ฒฝ๋กœ ์„ค์ •์€ ๋ฐ˜๋“œ์‹œ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•จ, ๊ฒฝ๋กœ ๋’ค์— /๋ฅผ ๋ถ™์—ฌ ์ฃผ์–ด์•ผํ•จ.)
Globals.filePath =  C:/file/upload/

  FileUtils.java  

//ํŒŒ์ผ ์—…๋กœ๋“œ 
public static List<Map<String,Object>> fileUpload(Map<String,Object> map, List<MultipartFile> fileList) throws Exception{ 
  String user = (String) map.get("memWriter");
  int board_no = (int)map.get("board_no");

  List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); 
  Map<String, Object> listMap = null; 
  for(MultipartFile mf : fileList){

  listMap = new HashMap<String,Object>(); 
  listMap.put("boardNo", board_no); 
  listMap.put("createUser", user); 
  listMap.put("originalFileName", mf.getOriginalFilename()); 
  
  // ์ €์žฅ์ด๋ฆ„
  listMap.put("storedFileName", CommonUtils.getRandomString() + mf.getOriginalFilename()); 
  listMap.put("fileSize", mf.getSize()); 

  list.add(listMap); 

  // globals.properties
  File dest = new File(EgovProperties.getProperty("Globals.filePath") + listMap.get("storedFileName"));
    if(!dest.exists()){
     dest.mkdirs(); //๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒ์„ฑ
    }
  listMap.put("file_path",mf.getOriginalFilename());
  listMap.put("real_file_path",dest);

  mf.transferTo(dest);
  }
  return list; 
}

DB ํ™•์ธ

 

 

~ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์•„๋ž˜ ์ฐธ๊ณ  ~

 

ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๊ตฌํ˜„

[AJAX] ๋‹ค์ค‘ fileupload / formData ์ด์šฉํ•˜์—ฌ JSON ํŒŒ๋ผ๋ฏธํ„ฐ ๋„˜๊ธฐ๊ธฐ  html  js file์€ JSON์— ํฌํ•จ๋  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ FormData ์•ˆ์— file๊ณผ JSON (= data)๋ฅผ append ์‹œํ‚จ๋‹ค. //FormData ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ var f..

truecode-95.tistory.com

 

 

 

 

[ajax]fileupload ์‹œ formData ์ด์šฉํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๋„˜๊ธฐ๊ธฐ

js // 1. form ์ž์ฒด๋ฅผ ๋„˜๊ธฐ๋Š” ๋ฐฉ๋ฒ• // var form = $(ajax_frm)[0]; // var formData = new FormData(for...

blog.naver.com

 

simpleBlog ๊ฐœ๋ฐœ ์ผ์ง€ (4)

json๊ณผ file์„ ๊ฐ™์ด ๋ณด๋‚ด๊ธฐ

medium.com