Kończę ten projekt, który używa okhttp do komunikacji z serwisem internetowym.Przesyłanie plików z okhttp
Wszystko jest w porządku dla zwykłych GET i POST, ale nie jestem w stanie prawidłowo załadować pliku.
Dokumenty okhttp są bardzo brakuje na te tematy i wszystko, co znalazłem tutaj lub gdziekolwiek nie wydaje się działać w moim przypadku.
To powinno być proste: muszę wysłać zarówno plik, jak i niektóre wartości ciągu. Ale nie mogę wymyślić, jak to zrobić.
następstwie niektórych próbkach znalazłem, po raz pierwszy próbowałem:
RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
.addFormDataPart("group", getGroup())
.addFormDataPart("type", getType())
.addFormDataPart("entity", Integer.toString(getEntity()))
.addFormDataPart("reference", Integer.toString(getReference()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
.build();
Daje mi "400 Bad request" błąd.
Więc próbowałem to z okhttp Przepisy:
RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
.addPart(Headers.of("Content-Disposition", "form-data; name=\"group\""), RequestBody.create(null, getGroup()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"type\""), RequestBody.create(null, getType()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"entity\""), RequestBody.create(null, Integer.toString(getEntity())))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"reference\""), RequestBody.create(null, Integer.toString(getReference())))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
.build();
sam rezultat.
Nie wiem, co jeszcze wypróbować lub na co zaglądnąć, aby to usunąć.
Żądanie odbywa się za pomocą tego kodu:
// adds the required authentication token
Request request = new Request.Builder().url(getURL()).addHeader("X-Auth-Token", getUser().getToken().toString()).post(requestBody).build();
Response response = client.newCall(request).execute();
Ale jestem pewien, że problemem jest to, jak Im budowy ciała żądania.
Co robię źle?
EDYCJA: "getFile()" powyżej zwraca obiekt File, przy okazji. Pozostałe parametry są ciągami i intami.
dzięki diogo.abdalla obudził się dla mnie .. –
Zmierzyłem się z tym samym problemem ... zastanawiając się, dlaczego przepisy sugerują użycie "addPart" z "Headers.of". – Jsm
Co robi funkcja getFile()? Czy jest podana dla ścieżki obrazu? –