[소스 환경]
BackEnd : Spring boot, jdk17, Lombok
Front: Vue, Axios
BackEnd에서 파일을 수정하는 로직을 배열로 받아 처리하는 부분이 포함
Axios에서 Form을 배열로 전달해야하는 상황이 발생
@PutMapping(value = "[주소]",
consumes = MediaType.MULTIPART_FORM_DATA_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public SuccessResponse<List<Response>> [메소드명] (@PathVariable String id,
@Valid @ModelAttribute Requests requests) {
return new SuccessResponse<>(service.upsert(id, requests));
}
@Getter
@Setter
public class Request {
private List<SubRequest> requests;
}
@Getter
@Setter
public class SubRequest {
private String id;
private List<MultipartFile> files;
}
일반적으로 Axios에서 파일을 전달하는 경우 아래와 같은 방식을 사용 (단일 처리)
async update(id, files) {
const headers = { 'Content-Type': 'multipart/form-data' };
const formData = new FormData();
files.forEach((file) => {
formData.append('files', file);
});
return await axios.put([주소], formData, headers);
},
배열로 사용하는 경우에는 아래와 같은 처리가 필요 (다건 처리)
- formdata.append(`requests...`, value)에 requests는 백엔드에서 사용한 key명을 사용
async update(id, parameters) {
const headers = { 'Content-Type': 'multipart/form-data' };
const formData = new FormData();
parameters.forEach((param, index) => {
for (const [key, value] of Object.entries(param)) {
if (value) formData.append(`requests[${index}].${key}`, value);
}
})
return await axios.put([주소], formData, headers);
},
'프런트엔드 > javascript' 카테고리의 다른 글
[javascript, Vue] fs을 이용한 Vue Component import 자동화 파일 생성 (0) | 2023.10.12 |
---|