Tôi đã kiểm tra mã của bạn với một mùa xuân backend đơn giản và nó hoạt động tốt:
@Controller
public class FileController {
@ResponseBody
@RequestMapping(value = "/data/fileupload", method = RequestMethod.POST)
public String postFile(@RequestParam(value="file", required=false) MultipartFile file,
@RequestParam(value="data") Object data) throws Exception {
System.out.println("data = " + data);
return "OK!";
}
}
Tôi đã sử dụng mã phía khách hàng của bạn với v1.1.5 góc:
var test = {
description:"Test",
status: "REJECTED"
};
var fd = new FormData();
fd.append('data', angular.toJson(test));
//remove comment to append a file to the request
//var oBlob = new Blob(['test'], { type: "text/plain"});
//fd.append("file", oBlob,'test.txt');
return $http.post('/data/fileupload', fd, {
transformRequest: angular.identity,
headers: {
'Content-Type': undefined
}
});
Yêu cầu có dạng như sau (được sao chép từ tab mạng của bảng điều khiển Chrome):
Request URL:http://localhost:8080/data/fileupload
Request Method:POST
Status Code:200 OK
Request Headers
POST /data/fileupload HTTP/1.1
Host: localhost:8080
...
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEGiRWBFzWY6xwelb
Referer: http://localhost:8080/
...
Request Payload
------WebKitFormBoundaryEGiRWBFzWY6xwelb
Content-Disposition: form-data; name="data"
{"description":"Test","status":"REJECTED"}
------WebKitFormBoundaryEGiRWBFzWY6xwelb--
Trả lời 200 OK và giao diện điều khiển sẽ xuất ra dự kiến: {"description":"Test","status":"REJECTED"}
Chỉ cần đảm bảo rằng bạn muốn gửi một yêu cầu duy nhất cho cả nội dung JSON và tệp được mã hóa? Bạn có thể làm rõ về luồng bạn muốn nhận không? –
@Benjamin Gruenbaum: Đúng vậy, tất cả trong một yêu cầu. Tôi đã tạo ra một phần phụ trợ Java Spring mà cần một phần JSON được yêu cầu, và một phần tệp là tùy chọn. Tôi có một hình thức mà người dùng nhập dữ liệu, sau đó mô hình được chuyển đổi thành Json bởi angular.toJson (..) và sau đó tôi muốn đăng bài đó. Người dùng cũng có thể chọn tải tệp lên trong cùng một biểu mẫu. – LuckyLuke
Hmmm, đây có thể là một công việc nhỏ hoặc rất nhiều thứ, bạn phải hỗ trợ những trình duyệt nào? –