Ciągle nie rozumiem innej metody przesyłania plików. Serwer zaplecza nie jest pod moją kontrolą, ale mogę przesłać plik za pomocą strony Swagger lub Listonosza. Oznacza to, że serwer działa poprawnie. Ale kiedy używam AngularJS do przesyłania, to nie działa.Wysyłaj wieloczęściowe dane formularzy z nazwą pliku w polu Request Payload
Oto, co działa za pomocą Postman do testowania. Jestem po prostu za pomocą form-data
:
Wskazówka, że wniosek ma nagłówków Content-Type jako multipart/form-data. Jednak Request Payload ma filename
i Content-Type jako image/png.
Oto mój kod:
$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
jest tylko obiekt z pliku url w imageData
.
Mój kod wysyła również podobne parametry adresu URL (dzięki czemu możemy zignorować ten problem). Ale Request Payload jest base64 i wygląda inaczej, ponieważ brakuje pola filename
.
Mam zerową kontrolę backend i to jest napisane w .NET.
Więc domyślam się, że moje pytanie brzmi: używając Angular (albo http, albo zasobu), w jaki sposób mogę zmodyfikować żądanie tak, że wysyłam poprawne żądanie ładunku, jak robi to Postman? Nie mogę wymyślić, jak to odwrócić.
Próbowałem tego https://github.com/danialfarid/ng-file-upload i rzeczywiście wykonałem polecenie OPCJE przed POST (zakładając wydanie CORS). Ale serwer dał błąd 405 dla OPCJE.
Aby wysłać efekt w pierwszym żądaniu, potrzebny jest właściwy obiekt 'Plik' (lub tylko' Blob'), a parametr 'params.imageData' jest łańcuchem znaków. – Musa
'params.imageData' to po prostu' file: // 'URL z' input type = file'. Czy masz na myśli coś jeszcze, o czym nie myślę? –
Z tego co napisałeś 'params.imageData' jest zakodowany w base64 png, który jest łańcuchem. Aby uzyskać FormData do publikowania danych w taki sposób, jak chcesz, musi to być obiekt File lub obiekt Blob. I'fd.append ('file', blob_from_imageData); 'szukaj SO dla pytania, aby przekonwertować URL danych na obiekt typu blob. – Musa