프로필 사진 올리기 1
2024. 8. 9. 13:52ㆍSpringboot-React
ProfileServiceImpl
package com.kh.service;
import java.io.File;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.kh.dto.Profile;
import com.kh.mapper.ProfileMapper;
@Service
public class ProfileServiceImpl implements ProfileService{
@Value("${file.upload-dir}")
private String profileDir;
@Autowired
private ProfileMapper mapper;
@Override
public List<Profile> getProfile() {
return mapper.getProfile();
}
@Override
public void insertProfile(Profile profile) {
mapper.insertProfile(profile);
}
@Override
public void uploadProfile(MultipartFile[] files, String username) {
File profileDirFile = new File(profileDir);
//폴더도 하나의 파일이므로 파일로 폴더 여부 확인
if(!profileDirFile.exists()) {
if(!profileDirFile.mkdirs()) {
System.out.println("폴더 생성");
throw new RuntimeException("폴더 생성 실패");
}
}
//프로필을 업데이트 하기 위해 받은 이미지가 없으므로 처음 이미지들 이름은 null로 설정
List<String> fileNames = null;
try {
fileNames = List.of(files).stream().map(file -> {
String fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();
File df = new File(profileDir + File.separator + fileName);
try {
file.transferTo(df);
}
catch (Exception e) {
throw new RuntimeException("파일 업로드 실패", e);
}
return fileName;
}).collect(Collectors.toList());
}
catch (Exception e) {
e.printStackTrace();
}
Profile profile = new Profile();
profile.setUsername(username);
profile.setProfileImageUrl(String.join(",", fileNames));
insertProfile(profile); //set으로 추가된 값을 DB에 넣어주기
}
}
ProfileController
package com.kh.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.kh.dto.Profile;
import com.kh.service.ProfileService;
@RestController
@RequestMapping("/profile")
public class ProfileController {
@Autowired
private ProfileService service;
@GetMapping("/watching")
public ResponseEntity<List<Profile>> getProfile() {
return ResponseEntity.ok(service.getProfile());
}
@PostMapping("/upload")
public ResponseEntity<String> insertProfile(
@RequestParam("files") MultipartFile[] files,
@RequestParam("username") String username
) {
service.uploadProfile(files, username);
return ResponseEntity.ok("등록 성공");
}
}
** parameterType error :
@RequestParam 안에 react에서 값을 가져올 때 값을 가져온 변수명을 작성하지 않으면 에러가 발생
@RequestParam("리액트에서 가져올 변수명")
'Springboot-React' 카테고리의 다른 글
네이버 로그인 3 (0) | 2024.08.13 |
---|---|
프로필 사진 올리기 2 (1) | 2024.08.09 |
이미지 여러개 올리기 2 (0) | 2024.08.06 |
이미지 여러개 올리기 1 (0) | 2024.08.06 |
네이버 로그인 2 (0) | 2024.07.30 |