[SPRING] ng-file-upload를 사용하여 Spring에서 많은 파일을 업로드하려고 할 때 빈 목록 <MultipartFile>
SPRINGng-file-upload를 사용하여 Spring에서 많은 파일을 업로드하려고 할 때 빈 목록
한 번에 여러 파일을 업로드 할 수있는 다음 컨트롤러 메서드가 있습니다.이 블로그 게시물과이 질문에 대한 답변에서 영감을 얻었습니다.
@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST)
@PreAuthorize(...)
public void upload(@PathVariable User user,
@RequestParam("file") List<MultipartFile> files) {
// handle files
}
그러나 요청에 포함되어 있지만 파일 목록은 항상 비어 있습니다.
세 번째 MultipartRequest 매개 변수를 메서드에 추가하면 :
public void upload(@PathVariable User user,
@RequestParam("file") List<MultipartFile> files,
MultipartRequest request)
업로드 된 파일이 올바르게 표시됩니다.
빈 List
파일을 제출하기 위해 ng-file-upload를 사용하고 있지만 문제와 관련이 있다고 생각하지 않습니다. 봄 4.2.4.
해결법
-
==============================
1.문제는 기본적으로 ng-file-upload가 이름 파일 [0], 파일 [1] 등을 사용하여 파일 배열을 제출한다는 것입니다. 업로드 서비스를 사용하는 경우 arrayKey 값으로 구성 할 수 있습니다. 빈 문자열로 설정하면 파일이 Spring과 @RequestParam ( "file") List
에 제출 된 모든 파일을 포함하는 동일한 파일 키로 강제 전송됩니다. 문제는 기본적으로 ng-file-upload가 이름 파일 [0], 파일 [1] 등을 사용하여 파일 배열을 제출한다는 것입니다. 업로드 서비스를 사용하는 경우 arrayKey 값으로 구성 할 수 있습니다. 빈 문자열로 설정하면 파일이 Spring과 @RequestParam ( "file") List
에 제출 된 모든 파일을 포함하는 동일한 파일 키로 강제 전송됩니다. Upload.upload({url: url, data: {file: arrayOfFiles}, arrayKey: ''})
-
==============================
2.다음과 같이 @ModelAttribute를 사용하십시오.
다음과 같이 @ModelAttribute를 사용하십시오.
@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST) @PreAuthorize(...) public void upload(@PathVariable User user,@ModelAttribute("uploadFile") FileUpload uploadFile) throws IllegalStateException, IOException { List<MultipartFile> files = uploadFile.getFiles(); ...
다음과 같은 클래스를 만듭니다.
public class FileUpload { private List<MultipartFile> files; public List<MultipartFile> getFiles() { return files; } public void setFiles(List<MultipartFile> files) { this.files= files; } }
-
==============================
3.나는 당신이 정면에서 데이터를 보내는 방식으로 java.util.List와 바인딩 할 수 없다고 생각한다. 요청으로 JSON 데이터를 만들고 @RequestBody로 List에 주석을 추가 한 경우 :
나는 당신이 정면에서 데이터를 보내는 방식으로 java.util.List와 바인딩 할 수 없다고 생각한다. 요청으로 JSON 데이터를 만들고 @RequestBody로 List에 주석을 추가 한 경우 :
@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST) @PreAuthorize(...) public void upload(@PathVariable User user, @RequestBody List<MultipartFile> files) { // handle files }
이게 효과가있다. 여기에 몇 가지 정보가 있습니다.
-
==============================
4.그것은 저에게 효과적입니다. UI에서 백엔드로 여러 첨부 파일이 포함 된 큰 '이메일'개체를 보냅니다.
그것은 저에게 효과적입니다. UI에서 백엔드로 여러 첨부 파일이 포함 된 큰 '이메일'개체를 보냅니다.
모난
sendEmailWithAttachments(taskId: string, template: string, email: any, modelConfig: any, files: any[]) { let formData = new FormData(); formData.append('form', new Blob([JSON.stringify(email)], {type: 'application/json'})); files.forEach(file => { formData.append('files', file); }); return this.$http({ method: 'POST', data: formData, url: this.baseUrl + '/' + taskId + '/email-with-attachment?template=' + template, headers: { 'Content-Type': undefined }, responseType: 'arraybuffer' }); }
Java Spring
@RequestMapping(value = "{taskId}/email-with-attachment", method = RequestMethod.POST, consumes = MULTIPART_FORM_DATA_VALUE) public void sendEmailWithAttachment( @PathVariable String taskId, @RequestParam String template, @RequestParam("form") MultipartFile form, @RequestParam("files") List<MultipartFile> files) throws IOException { Map<String, String> parameters = new ObjectMapper().readValue(form.getInputStream(), HashMap.class); System.out.println("taskId", taskId); System.out.println("template", template); System.out.println("files", files); System.out.println("parameters", parameters); }
from https://stackoverflow.com/questions/35160483/empty-listmultipartfile-when-trying-to-upload-many-files-in-spring-with-ng-fil by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 쿼리에서 Spring 데이터 몽고 사용 OR (0) | 2019.03.15 |
---|---|
[SPRING] 스프링 MVC 컨트롤러에서 폼 데이터를 Map으로 얻는 방법은? (0) | 2019.03.15 |
[SPRING] 다중 임차가있는 스프링 부트 + 스프링 데이터 (0) | 2019.03.15 |
[SPRING] 사용자 지정 인증 공급자가 호출되지 않음 (0) | 2019.03.15 |
[SPRING] 문자 인코딩 문제 스프링 (0) | 2019.03.15 |