2015-03-23 14 views
7

Sto cercando di replicare un caricamento di file jpg utilizzando OKHttp in un modulo multipart su un server PHP. Credo, ho ottenuto alcuni dei parametri nel posto sbagliato, non ho la familiarità con i moduli multipart in http e la nomenclatura.Quali sono le posizioni corrette per i parametri in OKHttp in una chiamata modulo multipart?

Ecco quello che sto cercando di realizzare

Messaggio parametri (coppie di valori nome): myuser, token, i tipi di https://www.somesite.com/jpgphotoupload.php

sto poi fare una richiesta di modulo multistrato con metodo POST, con il seguente: percorso: https://www.somesite.com/jpgphotoupload.php

dati di file: i dati JPEG immagine compressa di dimensioni 480 x 640 (Questo ho capito)

mimeType: image/jpeg (Questo comprendo)

Non so dove le seguenti coppie di valori nome dovrebbero essere posizionati come parte della richiesta modulo multistrato, prenotare addFormDataPart

parametri: nuovamente la forma dei parametri di cui sopra, (myUser, token, tipi)

nome: imagefile

filename: myname.jpg

Inoltre, ecco cos'altro può essere pertinente

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

Ecco il codice che ho attualmente.

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; 
     } 

risposta

9

Nel mio caso, avevo bisogno di caricare un video su un bucket Amazon S3. Questo è ciò che ha funzionato per me.

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

Ho bisogno di caricare un video che è la cattura su un dispositivo mobile, in modo da sto indovinando 'quindi .mp4' cosa devo specificare per' RequestBody.create (MediaType.parse ("video/quicktime"), sourceFile) '? utilizzo ancora 'quicktime'? (Non ne so molto dei video) –

+0

e la tua fonte video è solo un file? come in 'new File (myFileName)'? Qui sto assumendo che myFileName è il valore esatto passato prima. –

+1

Sì, la mia sorgente video era '' 'sourceFile''' nel codice fornito (un file video scritto sul disco). IIRC, '' 'myFileName''' è quello che stai dicendo che il nome del file è e può essere qualunque cosa tu voglia che sia. L'oggetto '' 'File''' viene usato per ottenere i dati, ma non penso che l'uri/nome originale sia importante. –

Problemi correlati