tôi vẫn còn lúng túng về phương pháp khác nhau của tải lên tập tin. Máy chủ phụ trợ không nằm trong tầm kiểm soát của tôi nhưng tôi có thể tải lên một tệp bằng cách sử dụng trang Swagger hoặc Postman. Điều đó có nghĩa là máy chủ đang hoạt động OK. Nhưng khi tôi sử dụng AngularJS để tải lên, nó không hoạt động.Tải lên hình nhiều phần dữ liệu dữ liệu với tên tập tin trong Request Payload
Đây là những gì các công trình sử dụng Postman để kiểm tra. Tôi chỉ sử dụng form-data
:
ý rằng Yêu cầu Headers có Content-Type là multipart/form-data. Nhưng yêu cầu Payload có filename
và Content-Type là hình ảnh/png.
Đây là mã của tôi:
$http({
method: 'POST',
url: ApiUrlFull + 'Job/Item?smartTermId=0&name=aaa1&quantity=1&ApiKey=ABC',
headers: { 'Content-Type': undefined },
transformRequest: function(data) {
var fd = new FormData();
fd.append('file', params.imageData);
return fd;
}
})
params
chỉ là một đối tượng với url tập tin trong imageData
.
Mã của tôi cũng có thể gửi params URL tương tự (vì vậy chúng tôi có thể bỏ qua các vấn đề gây ra). Nhưng yêu cầu Payload là base64 và có vẻ khác vì nó thiếu trường filename
.
Tôi có zero kiểm soát của backend và nó được viết bằng .NET. Vì vậy, tôi đoán câu hỏi của tôi là: Sử dụng Góc (hoặc $ http hoặc $ tài nguyên), làm cách nào để sửa đổi yêu cầu để tôi gửi đúng Yêu cầu Tải trọng như cách Postman làm điều đó? Tôi không thể tìm ra cách đảo ngược kỹ sư này.
Tôi đã thử https://github.com/danialfarid/ng-file-upload này và nó thực sự đã làm OPTIONS yêu cầu đầu tiên trước khi POST (giả sử vấn đề CORS). Nhưng máy chủ đã đưa ra 405 lỗi cho OPTIONS.
Bạn cần một đối tượng 'File' (hoặc chỉ là một' Blob') thực tế để gửi để nhận được hiệu ứng trong yêu cầu đầu tiên, 'params.imageData' là một chuỗi. – Musa
'params.imageData' chỉ là' tệp: // 'URL từ' kiểu đầu vào = tệp'. Hay bạn có ý gì đó khác mà tôi không nghĩ? –
Từ những gì bạn đăng 'params.imageData' là một png được mã hóa base64, là một chuỗi. Để có được FormData để đăng dữ liệu theo cách bạn muốn nó phải là một đối tượng File hoặc một đối tượng Blob. I'fd.append ('file', blob_from_imageData); 'tìm kiếm SO cho câu hỏi để chuyển đổi một url dữ liệu thành một blob. – Musa