2015-03-23 13 views
7

Próbuję odtworzyć plik w formacie JPG przy użyciu OKHttp do postaci wieloczęściowej na serwerze PHP. Sądzę, że mam niektóre parametry w niewłaściwym miejscu, nie mam znajomości wieloczęściowych formularzy w http i nazewnictwie.Jakie są prawidłowe miejsca dla parametrów w OKHttp w wywołaniu wieloczęściowym?

Oto co próbuję osiągnąć

opublikować parametrów (par wartości nazwa): myuser, Reklamowe, typy do https://www.somesite.com/jpgphotoupload.php

ja wtedy podejmowania wieloczęściowy formularza wniosku o metodzie POST, z następującym: ścieżce: https://www.somesite.com/jpgphotoupload.php

danych plik danych: JPEG skompresowany obraz o wymiarach 480 x 640 (to rozumiem)

mimeType: image/jpeg (to rozumiem)

Nie wiesz, gdzie się następujące pary wartości nazwa powinna być umieszczona jako część wieloczęściowy żądanie formy, próbował addFormDataPart

parametry: znowu postać powyżej parametrów (myUser, symboliczne, typy)

nazwa: imagefile

pliku: myname.jpg

Ponadto, oto co jeszcze może być istotne

  "Connection" , "Keep-Alive" 
      "ENCTYPE", "multipart/form-data" 
      "Content-Type", "multipart/form-data" 

Oto kod, który mam obecnie.

MediaType MEDIA_TYPE_JPG = MediaType.parse("image/jpg"); 

      OkHttpClient client = new OkHttpClient(); 
       RequestBody requestBody = new MultipartBuilder() 
         .type(MultipartBuilder.FORM) 
         .addPart(
           Headers.of("Content-Disposition", "form-data; name=\"imagefile\""), 
           RequestBody.create(MEDIA_TYPE_JPG, new File("/storage/emulated/0/download/camerapic.jpg"))) 
         .addFormDataPart("myuser", getprefmyuser(getBaseContext())) 
         .addFormDataPart("token", getpreftoken(getBaseContext())) 
         .addFormDataPart("types", "type1") 
         .addFormDataPart("fileName", "myname.jpg") 
         .build(); 

       Request request = new Request.Builder() 
         .header("myuser", getprefmyuser(getBaseContext())) 
         .header("token", getpreftoken(getBaseContext())) 
         .header("type", "car") 
         .url("https://www.somesite.com/jpgphotoupload.php") 
         .post(requestBody) 
         .build(); 

      Response response = null; 
      try { 
       response = client.newCall(request).execute(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
     ... 

     return null; 
     } 

Odpowiedz

9

W moim przypadku musiałem przesłać wideo do wiadra Amazon S3. To właśnie dla mnie zadziałało.

File sourceFile = new File(myUri); 

RequestBody requestBody = new MultipartBuilder() 
        .type(MultipartBuilder.FORM) 
        .addFormDataPart("keyOne", "valueOne") 
        .addFormDataPart("keyTwo", "valueTwo") 
        .addFormDataPart("file", "myFileName", RequestBody.create(MediaType.parse("video/quicktime"), sourceFile)) 
        .build(); 
+0

muszę przesłać film, który jest wychwytywanie na urządzeniu mobilnym, więc zgaduję '.mp4' więc co należy określić na' RequestBody.create (MediaType.parse („Video/QuickTime”), sourceFile) '? czy nadal używam 'quicktime'? (Nie wiem zbyt wiele o filmach) –

+0

a twoje źródło wideo to tylko plik? jak w "nowym pliku (myFileName)"? Tutaj zakładam, że myFileName jest dokładną wartością przekazaną wcześniej. –

+1

Tak, moim źródłem wideo było '' sourceFile''' w podanym kodzie (plik wideo zapisany na dysku). IIRC, '' 'myFileName''' jest tym co mówisz, że nazwa pliku jest i może być dowolna. Obiekt '' 'File''' służy do pozyskiwania danych, ale nie sądzę, aby oryginalna nazwa/nazwa miała znaczenie. –