Wpis z mikrobloga

#programowanie #androiddev Mam problem z uploadem danych przez rest. Korzystam z Retrofit 2.0, mam gotowa biblioteke obslugujaca to api korzystajac z Retrofita 1.9. Jedyna zmiana jaka zauwazylem to zmiana typu TypedFile na RequestBody ( ͡ ͜ʖ ͡) . Potrafie tez zrobic wlasciwe zapytanie przez linuxowego curla. Blad jaki otrzymuje to "Bad Request". Wydaje mi sie, ze problem jest w czesci wysylania/deklarowania pliku.

Api: http://strava.github.io/api/v3/uploads/#post-file
Kod: http://pastebin.com/0Aav6ZWq
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@panryz: Jesli odpowiedz od retrofita daje prawidlowy link:

Response{protocol=http/1.1, code=400, message=Bad Request, url=[https://www.strava.com/api/v3/uploads](https://www.strava.com/api/v3/uploads)}
to wyglada na to, ze jest ok.
Co do RequestBody to jesli podam zla nazwe pliku/sciezke to otrzymuje blad otwarcia pliku (wiec chyba wczytuje plik poprawnie)
  • Odpowiedz
@nocneszczury: .setLogLevel(RestAdapter.LogLevel.FULL) dopisz z łaski swojej :) nie będziesz się musiał domyślać tylko dostaniesz porządną zwrotkę co jest nie tak. Btw w Retroficie 2.0 chyba nie ma RestAdapter tylko jest Retrofit.
  • Odpowiedz
@panryz: udalo mi sie dodac logowanie. Dzieki ze probojesz pomoc! ()

11-19 03:00:08.193 5045-5074/? D/OkHttp: --> POST /api/v3/uploads HTTP/1.1

11-19 03:00:08.193 5045-5074/? D/OkHttp: --> END POST

11-19 03:00:08.441 5045-5074/? D/OkHttp: <-- HTTP/1.1 400
  • Odpowiedz
@panryz: Plik wyslany przez curl i retrofit jest taki sam. Poczytalem logi i znalazlem json z bledem:

{"message":"Bad Request","errors":[{"resource":"Upload","field":"file","code":"not a file"}]}

Czyli wychodzi na to, ze blednie przesylam plik.
W przypadku wysylania przez
  • Odpowiedz
Znalazłem błąd, prawidłowy interfejs do uploadu wygląda tak (może się komuś przyda):

@ Multipart

@ POST("/api/v3/uploads")

Call upload(

@ Part("file\"; filename=\"upload.gpx\" " ) RequestBody file,
  • Odpowiedz