2015-03-23 1 views
7

Ich versuche, ein JPG-Dateiupload mit OKHttp zu einem mehrteiligen Formular auf einem PHP-Server zu replizieren. Ich glaube, ich habe einige der Parameter an der falschen Stelle, ich habe nicht die Vertrautheit mit mehrteiligen Formen in http und der Nomenklatur.Was sind die korrekten Stellen für Parameter in OKHttp in einem mehrteiligen Formularaufruf?

Hier ist, was ich versuche

Geben Sie die Parameter (Name Wertepaare) zu erreichen: myuser, Token, Typen zu https://www.somesite.com/jpgphotoupload.php

ich dann eine mehrteilige Form Anfrage mit Verfahren machen POST, mit dem folgenden: Pfad: https://www.somesite.com/jpgphotoupload.php

Dateidaten: JPEG komprimierte Bilddaten der Größe 480 x 640 (das verstehe ich)

mime: image/jpeg (Das verstehe ich)

nicht sicher, wo die folgenden Name-Wert-Paare sollten als Teil des mehrteiligen Form Antrag gestellt werden, versucht addFormDataPart

Parameter: wieder der Parameter Form oben, (myuser, Token, Typen)

name: Bilddatei

Dateiname: myname.jpg

Darüber hinaus ist hier, was sonst

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

ist relevant sein kann Hier ist der Code, den ich im Moment haben.

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

Antwort

9

In meinem Fall musste ich ein Video in einen Amazon S3-Bucket hochladen. Das hat bei mir funktioniert.

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

Ich brauche ein Video hochladen, die Erfassung auf einem mobilen Gerät, so dass ich bin zu raten, '.mp4' so, was ich für' RequestBody.create (MediaType.parse („video/quicktime“) angeben sollte, sourceFile) '? verwende ich noch 'quicktime'? (Ich weiß nicht viel über Videos) –

+0

und Ihre Videoquelle ist das nur eine Datei? wie in 'neue Datei (myFileName)'? Hier nehme ich an, dass myFileName der genaue Wert ist, der vorher übergeben wurde. –

+1

Ja, meine Videoquelle war '' 'sourceFile''' in dem bereitgestellten Code (eine Videodatei, die auf die Festplatte geschrieben wurde). IIRC, '' 'myFileName''' ist, was Sie sagen, dass der Name der Datei ist und sein kann, was immer Sie wollen. Das '' 'File''' Objekt wird verwendet, um die Daten zu erhalten, aber ich glaube nicht, dass der ursprüngliche uri/name eine Rolle spielt. –

Verwandte Themen