2015-03-23 19 views
7

Ben bir PHP sunucusu üzerinde çok bölümlü forma OKHttp kullanarak bir jpg dosya yüklemesini çoğaltmak için çalışıyorum. Bazı parametrelerin yanlış yerde olduğuna inanıyorum, http ve nomenklatürde çok parçalı formlara aşina değilim. https://www.somesite.com/jpgphotoupload.phpÇok parçalı form çağrısı sırasında OKHttp'deki parametreler için doğru yerler hangileridir?

Sonra yöntemi ile bir çok bölümlü form talep ediyorum için MyUser, jeton, türleri: İşte

Ben Talep parametreleri (isim değer çiftleri)

başarmak çalıştığım şey POST, aşağıdaki ile: yolu: https://www.somesite.com/jpgphotoupload.php

dosya veriler: boyutunda 480 x 640 JPEG sıkıştırılmış görüntü verileri (anlıyorum Bu)

mimeType: Aşağıdaki isim değer çiftleri çok parçalı formu isteğinin parçası olarak yerleştirilmelidir image/jpeg (Anlıyorum Bu)

Emin değilim, addFormDataPart

parametreleri çalıştı: Tekrar yukarıdaki parametre formu, (MyUser, jeton, tipleri)

adı: imagefile

dosya adı: myname.jpg

Ayrıca, burada

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

ilgili olması İşte şu anda sahip kod olabilir başka ne var.

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

cevap

9

Benim durumumda, bir Amazon S3 paketine bir video yüklemem gerekiyordu. Bu benim için çalıştı.

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

bir mobil cihazda yakalama olan bir videoyu yüklemek gerekir, bu yüzden tahmin ediyorum '.mp4' yüzden (' RequestBody.create (MediaType.parse için "video/quicktime") belirtmek gerektiğini, sourceFile ile) '? Hala "quicktime" kullanıyor muyum? (Videolarla ilgili fazla bilgim yok) –

+0

ve video kaynağınız sadece bir dosya mı? yeni Dosya (myFileName) 'de olduğu gibi? Burada, myFileName'in daha önce aktarılan tam değer olduğunu varsayarak kabul ediyorum. –

+1

Evet, video kaynağım sağlanan kodda '' 'sourceFile''' idi (diske yazılan bir video dosyası). IIRC, '' '' 'myFileName''', dosya isminin ne olduğunu ve ne olmasını istediğinizi söyleyebileceğiniz şeydir. Verileri almak için '' '' '' '' '' nesnesi kullanılır, fakat orijinal uri/ismin önemli olduğunu düşünmüyorum. –

İlgili konular