ํฐ์คํ ๋ฆฌ ๋ทฐ
[spring] ํด๋ก ์ฝ๋ฉ08 User - ํ๋กํ ์ฌ์ง ๋ฑ๋ก, ์กฐํ, ์ญ์
yeahajeong 2020. 4. 8. 17:11# ํ์ผ ์ ๋ก๋๋ฅผ ํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
- ์น์๋ฒ์ ์ ์ฅํ๊ธฐ
- DB์ (byteํํ๋ก) ์ ์ฅํ๊ธฐ
์ค๋ฌด, ๋๊ท๋ชจ ์ฌ์ดํธ ๋ฑ์์ ๋ง์ด ์ฌ์ฉํ๋ ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
# ํ์ผ ์ ๋ก๋๋ฅผ ์ํด์ ํด์ผํ ์ผ
1. pom.xml ์ ๋ชจ๋ ์ถ๊ฐ commons-fileupload
<!-- ํ์ผ ์
๋ก๋๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
2. DB ์ค์ jdbc.properties ์์ ๊ณ์ ๋น๋ฐ๋ฒํธ๊ฐ ๋ง๋์ง ํ์ธ
3. ์ค์ ํ์ผ mvc-config.xml์์ ํ์ผ ์ ๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น๋ฑ๋ก ํ๊ธฐ
<!-- [ํ์ผ ์
๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ]-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>50000000</value>
</property>
</bean>
4. ํ ์ด๋ธ ์์ฑ sql
ํ ์ด๋ธ ํ๋
- ํ์ผ ์๋ณ ์์ด๋ user_img_no
- ์ด๋ค ์ ์ ์ ํ์ผ์ธ์ง user_no
- ํ๋กํ ์ค๋ฆฌ์ง๋ ํ์ผ๋ช profile_name
- ํ์ผ ์ฌ์ด์ฆ profile_size -> ๋ฐ์ดํธ ์๊ฐ ์ผ๋ง์ธ๊ฐ
- ํ์ผ ํ์ฅ์ profile_content_type
- ์ค์ ํ์ผ ๋ฐ์ดํฐ profile_data -> longblob(16๊ธฐ๊ฐ๊น์ง ์ ์ฅ๊ฐ๋ฅ)
Controller
UsersController
//ํ๋กํ ์ฌ์ง ๋ฑ๋ก ์์ฒญ
@PostMapping("/profile/upload")
public ModelAndView photoUpload(UserImgsVO imgFile, HttpSession session) throws Exception {
logger.info("/upload : Post์์ฒญ ๋ฐ์!!!!");
logger.info("ํ์ผ ํ์ธ : " + imgFile);
MultipartFile mfile = imgFile.getFile();
imgFile.setProfileName(mfile.getOriginalFilename());
imgFile.setProfileSize(mfile.getSize());
imgFile.setProfileContentType(mfile.getContentType());
imgFile.setProfileData(mfile.getBytes());
usersService.insertUserImg(imgFile);
//์ ์ ๋ฒํธ๋ก ํ์ ์ ๋ณด ์ ๋ถ ์กฐํ
UsersVO modifyUser = usersService.inquiryOfUserByUserNo(imgFile.getUserNo());
//๋ค์ ๋ก๊ทธ์ธ ์ธ์
์ ์ ์ฅ
session.setAttribute("login", modifyUser);
//์ธ์
ํ์ธ
System.out.println("์์ ๋ ๋ก๊ทธ์ธ ์ธ์
: " + session.getAttribute("login"));
return new ModelAndView ("redirect:/user/modify");
}
ํ๋ก ํธ์์ ๋ฐ์ ํ์ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ mfile์ ์ ์ฅ ํ ๋ค์ imsFile์ ๊ฐ์ ์ง์ ํด์ค๋ค.
mfile์ ๋ณด๋ฅผ ๋ค์ ์ถ์ถํด์ VO์ ์ฑ์์ค ํ ๋ค์ DB์ ๋ฑ๋กํ๋ค.
์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ผ๋ฏ๋ก ๋ก๊ทธ์ธ ์ธ์ ๋ ๋ณ๊ฒฝํด์ค๋ค.
//ํ์ผ ๋ถ๋ฌ์ค๊ธฐ ์์ฒญ
@RequestMapping("/profile/{userNo}")
public ResponseEntity<byte[]> getProfile(@PathVariable int userNo) throws Exception {
logger.info("/user/profile/" + userNo + " -> POST ์์ฒญ ๋ฐ์ ! " );
UserImgsVO profile = usersService.getProfile(userNo);
logger.info("userNo๋ก ํ์ผ ๋ถ๋ฌ์ค๊ธฐ ์์ฒญ profile ํ์ธ : " + profile);
//ํ์ผ์ ํด๋ผ์ด์ธํธ๋ก ์ ์กํ๊ธฐ ์ํด ์ ์ก์ ๋ณด๋ฅผ ๋ด์ ํค๋ ์ค์
HttpHeaders headers = new HttpHeaders();
String[] ftypes = profile.getProfileContentType().split("/");
//์ ์กํค๋์ ํ์ผ์ ๋ณด์ ํ์ฅ์๋ฅผ ์
ํ
.
headers.setContentType(new MediaType(ftypes[0], ftypes[1]));
//์ ์กํค๋์ ํ์ผ ์ฉ๋์ ์
ํ
headers.setContentLength(profile.getProfileSize());
//์ ์กํค๋์ ํ์ผ๋ช
์ ์
ํ
headers.setContentDispositionFormData("attachment", profile.getProfileName());
return new ResponseEntity<byte[]>(profile.getProfileData(), headers, HttpStatus.OK);
}
/profile/์ ์ ์ ๋ฒํธ -> ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํ๋กํ์ ์กฐํํ๋ค.
//ํ๋กํ ์ฌ์ง ์ญ์ ์์ฒญ
@PostMapping("/profile/delete")
public ModelAndView photoDelete(int userNo, HttpSession session) throws Exception {
logger.info("ํ๋กํ ์ฌ์ง ์ญ์ ์์ฒญ /profile/delete POST์์ฒญ");
usersService.deleteUserImg(userNo);
//์ ์ ๋ฒํธ๋ก ํ์ ์ ๋ณด ์ ๋ถ ์กฐํ
UsersVO modifyUser = usersService.inquiryOfUserByUserNo(userNo);
//๋ค์ ๋ก๊ทธ์ธ ์ธ์
์ ์ ์ฅ
session.setAttribute("login", modifyUser);
//์ธ์
ํ์ธ
System.out.println("์์ ๋ ๋ก๊ทธ์ธ ์ธ์
: " + session.getAttribute("login"));
return new ModelAndView("redirect:/user/modify");
}
Service
UsersService
//ํ๋กํ ์ฌ์ง ๋ฑ๋ก
@Transactional
@Override
public void insertUserImg(UserImgsVO file) throws Exception {
//์ญ์ ํ๊ณ ๋ฑ๋กํด์ผํจ!
usersDAO.deleteUserImg(file.getUserNo());
usersDAO.insertUserImg(file);
}
//์ฒจ๋ถํ์ผ์ DB์์ ๋ถ๋ฌ์ค๊ธฐ
@Override
public UserImgsVO getProfile(int userNo) throws Exception {
return usersDAO.getProfile(userNo);
}
//ํ๋กํ ์ฌ์ง ์ญ์
@Override
public void deleteUserImg(int userNo) throws Exception {
usersDAO.deleteUserImg(userNo);
}
ํ๋กํ ์ฌ์ง ๋ฑ๋ก์ ๋ฑ๋ก๋์ด์๋ ์ฌ์ง์ ์ญ์ ํ๊ณ ๋ฑ๋กํด์ผํ๋ค -> ํธ๋์ ์ (์ฌ๋ฌ๊ฐ์ SQL์ด ์๋ํ ๋ ํ๋์ ๋ฌถ์, ํ๋์ ๊ฑฐ๋๋ก ์ธ์๋๋๊ฒ. ์ฌ๋ฌ๊ฐ์ SQL์ด ์ ์ ์คํ๋๋ฉด commit, ํ๋๋ผ๋ ์คํจํ๋ฉด rollbackํ๋ค.)
pom.xml ํธ๋์ ์ ๋ชจ๋ ์ค์น
<!-- ์คํ๋ง tx ๋ชจ๋ -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
mvc-config.cml ํธ๋์ ์ ์ค์
<!-- [ํธ๋์ญ์
๋งค๋์ ๋น ๋ฑ๋ก] -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds" />
</bean>
servlet-config.xml
<!-- ํธ๋์ญ์
๊ด๋ จ ์๋
ธํ
์ด์
๋์ ์ค์ -->
<tx:annotation-driven transaction-manager="txManager"/>
//์์ด๋๋ก ํ์์ ๋ชจ๋ ์ ๋ณด ์กฐํ
@Override
public UsersVO inquiryOfUserById(String id) throws Exception {
return usersDAO.inquiryOfUserById(id);
}
//ํ์๋ฒํธ๋ก ํ์์ ๋ชจ๋ ์ ๋ณด ์กฐํ
@Override
public UsersVO inquiryOfUserByUserNo(int userNo) throws Exception {
return usersDAO.inquiryOfUserByUserNo(userNo);
}
'Project > Instagram' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[spring] ํด๋ก ์ฝ๋ฉ10 User - ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ (0) | 2020.04.09 |
---|---|
[spring] ํด๋ก ์ฝ๋ฉ09 User - ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ (0) | 2020.04.09 |
[spring] ํด๋ก ์ฝ๋ฉ07 User - ํ์์ ๋ณด ๋ณ๊ฒฝ (0) | 2020.04.08 |
[spring] ํด๋ก ์ฝ๋ฉ06 User - ๋ก๊ทธ์์ (0) | 2020.04.08 |
[spring] ํด๋ก ์ฝ๋ฉ05 User - ๋ก๊ทธ์ธ, ์ธ์ (0) | 2020.04.08 |
- Total
- Today
- Yesterday
- ์คํ๋ง๋ถํธ ์๋์์ฑ
- ๊ฒ์ํ ์ญ์
- ์ ์ฒด๊ฒ์๋ฌผ ์กฐํ
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฒ์ํ ์กฐํ
- java jdk ์ค์น
- java ํ๊ฒฝ๋ณ์
- Java
- mysql์ค์น
- ๊ฒ์ํ๋ง๋ค๊ธฐ
- ์ดํด๋ฆฝ์ค ํ๊ธ ์ธ์ฝ๋ฉ
- ์๋ฐ
- Algorithm
- ๊ฐ๋ฐ
- ์๋ฃ๊ตฌ์กฐ
- ๊ฒ์๋ฌผ ์ญ์
- ๊ฐ๋ฐํ๊ฒฝ๊ตฌ์ถ
- typeAliases
- tomcat์ค์น
- ์จ๋ฆฌ์์ค
- ์ดํด๋ฆฝ์ค ์ค์น
- ๋ถํธ ์๋์์ฑ
- ๊ฒ์๋ฌผ์กฐํ
- ๋ณ๋ช ์ฒ๋ฆฌ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |