[file I/O 정리]
- commons-upload => pom.xml
- webpage.xml => defaultEncoding,maxUploadSize="-1",
maxlnMemorySize(속도향상) : 단점- 메모리 과부하로 인하여 서버가 shutdown될 수 있음 - Front-end : 파일첨부1개, 파일첨부 여러개, 파일첨부 1개씩 여러개 담을 경우
- Java Controller에서 @RequestParam("name명") MultipartFile 객체명
- FileCopyUtils.copy() 를 이용해 웹 디렉토리 출력가능
- commons-upload 라이브러리 : localhost서버, CDN서버에서 사용 가능(상대방 서버)
[ I/O 파일 업로드 라이브러리 사용 - setting ]
mvnrepository 여기서 Apache Commons FileUpload » 1.5 이거 pom.xml에 복붙
=>
webpage.xml 에
<!-- 파일업로드 사용할수 있도록 Class를 XML로 로드 -->
<!-- id="multipartResolver" : id고정! 주의 -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="defaultEncoding" value="utf-8"></beans:property>
<beans:property name="maxUploadSize" value="-1"></beans:property>
<beans:property name="maxInMemorySize" value="200000"></beans:property>
</beans:bean>
=> server restart
👀
value="-1" : 최대 업로드 파일 용량 제한 없음 (제한 하고싶으면 용량 변환해서 작성 , 실제서버에서는 -1로함)
maxInMemorySize
: 너무 높게 잡으면 서버가 죽을수 있으니 주의 (2097152 : 2MB)
maxInMemorySize
Tomcat에서 사용되는 메모리와 대칭이 되며
server.xml에 메모리 max사이즈에 할당되는 사이즈만큼 적용 가능하다, 그 이상일 경우 error!
⚡ 파일 업로드
1. fileupload.jsp
<body> <form id="frm" method="post" action="./fileupok.do" enctype="multipart/form-data"> <p>첨부파일 업로드</p> 파일첨부 : <input type="file" name="mfile"><br> <input type="button" value="전송" onclick="fileupload()"> </form> </body> <script> function fileupload(){ frm.submit(); } </script>
2. shop_main2.java ( Controller ) 새로 생성
enctype="multipart/form-data" 이거 꼭 써줘야함!!
package shop; //~ import 생략 @Controller public class shop_main2 { @Autowired BasicDataSource dbInfo; PrintWriter pw = null; @PostMapping("/fileupok.do") public void fileupok(@RequestParam("mfile") MultipartFile files,HttpServletRequest req) throws Exception { // HttpServletRequest req : 이게 없으면 realpath를 가져오지 못함!! String filenm = files.getOriginalFilename(); //첨부한 파일명 long filesize = files.getSize(); //첨부한 파일 사이즈 String filetype = files.getContentType(); //첨부한 파일 속성 String url = req.getServletContext().getRealPath("/upload/"); String result = url + filenm; if(filesize > 2097152) { //2MB제한 System.out.println("첨부파일 용량은 2MB 이하입니다."); }else { FileCopyUtils.copy(files.getBytes(), new File(result)); //첨부한 파일을 저장시키겠다 } } }
- 여긴 i/o라 예외처리 필수(try~catch or throws Exception)
- files : 이름 암거나 지으면됨
- @RequestParam("input name명")
- MultipartFile : interface임
- HttpServletRequest req : 이게 없으면 realpath를 가져오지 못함!!
3. D:\spring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\webspring
에 upload 디렉토리 만들어주삼
⚡ 파일 여러개 첨부
위 파일에서 진행
- fileupload2.jsp
<body> <form id="frm" method="post" action="./fileupok2.do" enctype="multipart/form-data"> <p>첨부파일 업로드</p> 파일첨부1 : <input type="file" name="mfile"><br> 파일첨부2 : <input type="file" name="mfile"><br> 파일첨부3 : <input type="file" name="mfile"><br> <!-- 둘다 받는 방식 동일! --> 파일첨부 multiple : <input type="file" name="mfile" multiple="multiple"><br> <input type="button" value="전송" onclick="fileupload()"> </form> </body> <script> function fileupload(){ frm.submit(); } </script>
- shop_main2.java 에 추가 - @PostMapping("/fileupok2.do")
/*-- 첨부파일 여러개인 경우 --*/ @PostMapping("/fileupok2.do") public void fileupok2(@RequestParam("mfile") MultipartFile files[], HttpServletRequest req ) throws Exception { //front에서 동일한 name을 사용한 갯수만큼 출력 : (비어있어도 null 이기 때문 3출력) int file_ea = files.length; System.out.println(files[0].getOriginalFilename()); System.out.println(files[1].getOriginalFilename()); System.out.println(file_ea); }
- 첨부파일 input name이 동일한 경우 원시배열로 받아야함!
- 이름이 다 다른 경우 @RequestParam("mfile1") MultipartFile files1,@RequestParam("mfile2") MultipartFile files2
이렇게 받아야함..!
'CLASS > SPRING,JSTL' 카테고리의 다른 글
#4-3 / gallery board select-list (spring + I/O + database) (0) | 2024.07.11 |
---|---|
#4-2 / gallery board insert-write (spring + I/O + database) (1) | 2024.07.11 |
#3-2 / coupon delete,update (spring + database) (0) | 2024.07.10 |
#3-1 / coupon insert,select (spring + database) (0) | 2024.07.10 |
#2-2 / spring + database 연결,회원가입 JSTL+spring+Datasource (0) | 2024.07.09 |