2015-08-11 20 views
7

Tôi đang cố gắng tải lên tệp nhiều tệp bằng cách sử dụng FormData và spring.Tải lên nhiều tệp bằng ajax và spring mvc

HTML:

<input type="file" name="img" multiple id="upload-files"> 

JS mã:

var ajaxData = new FormData(); 
var files = $('#upload-files').prop('files'); 
for(var i=0;i<files.length;i++){ 
    ajaxData.append('file['+i+']', files[i]); 
} 
ajaxData.append("file", files); 
$http.post('../rest/upload', ajaxData, { 
    headers: {'Content-Type': undefined }, 
    transformRequest: angular.identity 
}); 

Xuân điều khiển mã:

@RequestMapping(value = "/upload", produces="application/json", method = RequestMethod.POST) 
@ResponseBody 
public String upload(
     @RequestParam ArrayList<MultipartFile> files 
){ 
    System.out.println(files.size()); 
    return null; 
} 

Tuy nhiên, số lượng các tập tin được sắp ra là 0 khi gửi yêu cầu với nhiều tệp. Khi sử dụng ký hiệu mảng MultipartFile[] files thay vì ArrayList, nó cung cấp 400, Yêu cầu không hợp lệ.

Làm cách nào để bộ điều khiển lò xo hoạt động với nhiều tệp? Tôi không thể tìm ra giải pháp cho các câu hỏi SO khác.

+0

Bạn đã thử định vị lại danh sách thành một đối tượng và cấu hình CommonsMultipartResolver và InternalResourceViewResolver trên spring-servlet.xml chưa? –

+0

Bạn đã thêm mã hóa đúng vào nút gửi biểu mẫu chưa? ví dụ.

và kiểu đầu vào là

Trả lời

4

Theo mặc định, DataBinder cố gắng ràng buộc tham số yêu cầu để nhắm mục tiêu đối tượng theo quy ước - tên tham số từ yêu cầu (FormData trong trường hợp của bạn) và trong hành động của bộ điều khiển phải khớp.

Trong trường hợp của bạn, bạn nên đổi tên file[i]-files[i]: tham số

for(var i=0; i < files.length; i++){ 
    ajaxData.append('files[' + i + ']', files[i]); 
} 

HOẶC đổi tên hành động từ ArrayList<MultipartFile> files để ArrayList<MultipartFile> file


Ngoài ra, xóa dòng này ajaxData.append("file", files); (đó là ngay sau khi cho vòng lặp), bởi vì nó đang thiết lập một tham số có cùng tên và một số loại trục trặc có thể xảy ra.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan