wyślij obraz zakodowany w base64 za pomocą curl

8

Próbuję wysłać obraz zakodowany w formacie base64 z wiersza polecenia, używając curli base64tak:

curl -X POST -H "Content-Type: application/json" -d '{"image" : $( base64 ~/Pictures/1.jpg )}' http://some/url/  

Jednak otrzymuję odpowiedź z informacją, że $jest to nieoczekiwany token. Jak wysłać obraz zakodowany w standardzie base64?

Małe dziecko
źródło

Odpowiedzi:

20

@muru ma rację, jednak jeśli próbujesz wysłać kodowanie json, twoje dane base64 mogą być zbyt duże dla wiersza poleceń i możesz preferować coś takiego:

(echo -n '{"image": "'; base64 ~/Pictures/1.jpg; echo '"}') |
curl -H "Content-Type: application/json" -d @-  http://some/url/ 

-X POSTTo wywnioskować -d.

meuh
źródło
Tak, o wiele lepiej.
muru
Cześć meuh, nie udało mi się, kiedy próbuję uruchomić ten połączony wiersz poleceń z kodu PHP, $ html = shell_exec ($ str); jeśli skopiuję kod $ str i uruchomię bezpośrednio w wierszu poleceń, będzie dobrze. Ale shell_exec nie działał, proszę o pomoc :( bardzo dziękuję.
Bảo Nam
Haha, stworzyłem plik bash, chmod + x ten plik, a następnie napisałem polecenie do pliku i uruchomiłem shell_exec ('/ path to sh file / xxx.sh') ;, działałem jak urok. Dzięki.
Namo Nam
1
@ BảoNam Ok, dobre rozwiązanie. Nie mam wiele na temat php i nie widzę żadnego oczywistego powodu, dla którego pierwsza wersja nie zadziałała. Poszukaj wskazówek w pliku dziennika błędów serwera. Myślę, że lepiej byłoby zacząć od nowego pytania, gdy zaangażowany jest php.
Meuh
5

Bash nie rozwija się w pojedynczych cudzysłowach. '{"image" : $( base64 ~/Pictures/1.jpg )}'zostaje wysłany w stanie, w jakim się znajduje. Zamiast tego spróbuj:

'{"image" : "'"$( base64 ~/Pictures/1.jpg)"'"}'

(Wyjdź z cytatu otwierającego przed wykonaniem zamiany poleceń, a następnie ponownie otwórz cytat.)

muru
źródło
2
Musisz podwoić cudzysłów, w $()przeciwnym razie linie wyjściowe base64 zostaną podzielone na kilka argumentów curl.
Meuh
Polecenie wielu plików obrazów i danych$ curl -d "name=Avatar&username=avatar&password=A1234567&[email protected]&token=16b185fe421d5017afb11691681906ed" --data-urlencode 'avatar='"$( base64 ~/Pictures/avatar004.jpg)"'' --data-urlencode 'image='"$( base64 ~/Pictures/avatar001.jpg)"'' --data-urlencode 'picture='"$( base64 ~/Pictures/577383.jpg)"'' http://localhost:8000/api/v1/users/register/
Moreno