POST
żądanie axios uderza w adres URL na kontrolerze, ale ustawienie wartości null dla mojej klasy POJO, kiedy przeglądam narzędzia programistyczne w chrome, ładunek zawiera dane. Co ja robię źle?
Żądanie Axios POST:
var body = {
userName: 'Fred',
userEmail: '[email protected]'
}
axios({
method: 'post',
url: '/addUser',
data: body
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Odpowiedź przeglądarki:
Jeśli ustawię nagłówki jako:
headers:{
Content-Type:'multipart/form-data'
}
Żądanie zgłasza błąd
Błąd podczas publikowania danych wieloczęściowych / formularzy. Nagłówek Content-Type nie ma granicy
Jeśli zrobię to samo w listonoszu, działa dobrze i ustawia wartości dla mojej klasy POJO.
Czy ktoś może wyjaśnić, jak ustawić granicę lub jak wysłać dane formularza za pomocą axios.
źródło
set
nie działa{ method: 'post', url: 'myurl', data: bodyFormData, headers: {'Content-Type': 'multipart/form-data' } }
Sprawdź querystring .
Możesz użyć tego w następujący sposób:
źródło
W moim przypadku musiałem dodać granicę do nagłówka w następujący sposób:
To rozwiązanie jest również przydatne, jeśli pracujesz z React Native.
źródło
FormData._boundary
jest niezdefiniowany zarówno w Chrome 76, jak i Firefox 67, a axios i tak usuwa nagłówek Content-Type , więc nie powinno to mieć żadnego efektu.Prześlij (wiele) plików binarnych
Node.js
Sprawy komplikują się, gdy chcesz publikować pliki
multipart/form-data
, zwłaszcza wiele plików binarnych. Poniżej znajduje się działający przykład:headers: {'Content-Type': 'multipart/form-data' }
wolęheaders: formData.getHeaders()
async
iawait
powyżej, możesz je zmienić na proste oświadczenia Obietnicy, jeśli ich nie lubiszNowo dodana treść poniżej:
Przeglądarka
Przeglądarka
FormData
różni się od „formularza-danych” pakietu NPM. Poniższy kod działa dla mnie w przeglądarce:HTML:
JavaScript:
źródło
concat-stream
,async
iawait
) dla wielu przesyłanie plików za pomocąfor(var x = 0; x<this.state.files.length; x++) { formData.append('files[]', this.state.files[x]) }
tak mogę przesłać używającaxios.post(url, formData, config)
Jeszcze bardziej proste:
źródło
Wykorzystanie formatu application / x-www-form-urlencoded w axios
Przeglądarka
W przeglądarce można użyć interfejsu API URLSearchParams w następujący sposób:
Zauważ, że URLSearchParams nie jest obsługiwany przez wszystkie przeglądarki (patrz caniuse.com), ale dostępna jest funkcja wielokrotnego wypełniania (pamiętaj, aby wypełnić globalne środowisko).
Alternatywnie możesz kodować dane za pomocą biblioteki qs:
Lub w inny sposób (ES6),
źródło
Sposób działania ES6 2020
Mając formularz w html powiązałem dane w następujący sposób:
DANE:
onSubmit:
źródło
Powyższa metoda działała dla mnie, ale ponieważ była to rzecz, której często potrzebowałem, zastosowałem podstawową metodę dla płaskiego obiektu. Uwaga: używałem również Vue, a nie REACT
Co działało dla mnie, dopóki nie natrafiłem na bardziej złożone struktury danych z zagnieżdżonymi obiektami i plikami, które następnie pozwoliły na następujące
źródło
objectToFormData
napackageData
odwrótźródło