2017-07-31 61 views
1

接口發送使用改造

public interface iUpload{ 
     @Multipart 
     @POST("/uploadmultiplepropimages/") 
     SamplePojoClass getUploadData(
      @Part("prop_id") RequestBody prop_id, 
      @Part("type") RequestBody type, 
      @Part("prop_photos") TypedFile prop_photos 
     ); 
} 

我送這樣的多部分數據。我不能發送這樣的請求正文文本。

@Override 

    protected Void doInBackground(String... params) { 

     String s = params[0]; 
     File photoFile = new File(s); 
     System.out.println("file path:"+photoFile); 
     TypedFile photoTypedFile = new TypedFile("image/png", photoFile); 

     RequestBody idd = RequestBody.create(MediaType.parse("text/plain"), ""); 
     RequestBody type = RequestBody.create(MediaType.parse("text/plain"), "single"); 

     try { 
      //uploadImageResponse = RequestResponse.getUploadData(AccountUtils.getProfileId(),photoTypedFile); 
      uploadImageResponse = RequestResponse.getUploadData(idd,type,photoTypedFile); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    }` 

它說錯誤:

Cannot access ByteString class file.

回答

0

使用以下機能的研究您的問題

public static RegisterResponse Uploadimage(String id, String photo,String proof) { 

     File file1 = null, file2 = null; 
     try { 
      if (photo.trim() != null && !photo.trim().equals("")) { 
       file1 = new File(photo); 
      } 
      if (proof.trim() != null && !proof.trim().equals("")) { 
       file2 = new File(proof); 
      } 

      HttpClient client = new DefaultHttpClient(); 
      HttpPost post = new HttpPost(WEB_SERVICE + "protoupload.php?"); 

      MultipartEntity reqEntity = new MultipartEntity(); 

      // reqEntity.addPart("studentid", new StringBody(
      // Global.profileDetail.id)); 
      reqEntity.addPart("id", new StringBody(id)); 

      if (file1 == null) { 
       reqEntity.addPart("photo", new StringBody("")); 
      } else { 
       FileBody bin1 = new FileBody(file1); 
       reqEntity.addPart("photo", bin1); 
      } 
      if (file2 == null) { 
       reqEntity.addPart("proof", new StringBody("")); 
      } else { 
       FileBody bin2 = new FileBody(file2); 
       reqEntity.addPart("proof", bin2); 
      } 
      post.setEntity(reqEntity); 
      HttpResponse response = client.execute(post); 
      HttpEntity resEntity = response.getEntity(); 
      String inputStreamString = EntityUtils.toString(resEntity); 

      if (inputStreamString.contains("result")) { 

       return new Gson().fromJson(inputStreamString, 
         RegisterResponse.class); 
      } 

     } catch (Exception ex) { 
      Log.e("Debug", "error: " + ex.getMessage(), ex); 
     } 

     return new RegisterResponse(); 
    } 
2

我希望你已經添加了okio依賴在你的gradle文件中。這將解決無法訪問ByteString類文件錯誤。

compile 'com.squareup.okio:okio:1.13.0' 

然後編輯您的iUpload接口文件,如:

public interface iUpload{ 
     @Multipart 
     @POST("/uploadmultiplepropimages/") 
     SamplePojoClass getUploadData(
       @Part MultipartBody.Part file 
       @Part MultipartBody.Part prop_id, 
       @Part MultipartBody.Part type 
     ); 
    } 

然後寫MultipartBody.Part這樣的:

RequestBody lRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), pFile); 
    MultipartBody.Part lFile = MultipartBody.Part.createFormData("file", pFile.getName(), lRequestBody); 
    MultipartBody.Part id = MultipartBody.Part.createFormData("prop_id", "WRITE_ID_HERE"); 
    MultipartBody.Part type = MultipartBody.Part.createFormData("type", "WRITE TYPE HERE"); 

最後這些參數傳遞給您的API是這樣的:

uploadImageResponse = RequestResponse.getUploadData(lFile,id,type); 

我希望它能解決你的問題。

注意:這裏pFileFile的實例。要dicrectory您可以編寫代碼獲取文件:

File pFile = new File("PATH_OF_FILE"); 
+0

沒有工作,那麼在下面的錯誤 {「頭」:{「namesAndValues」:「內容處置」,「表單數據;名{「headers」:{「namesAndValues」:[「Content-Disposition」,「form-data; name \ u003d \」type \「」]}} –

+0

@LaxmanMarth請發佈你得到的整個錯誤日誌。並將其更新爲您的問題。 –

0
I have done Multipart upload in okhttp. I hope this will help. 
     MultipartBody.Builder multipartBuilder = new MultipartBody.Builder(); 
     multipartBuilder.setType(MultipartBody.FORM); 
     multipartBuilder.addFormDataPart("prop_photos", photoFile, RequestBody.create(MEDIA_TYPE_PNG, file)); 

      multipartBuilder 
         .addFormDataPart("type", type) 
         .addFormDataPart("prop_id", prop_id); 

    RequestBody requestBody = multipartBuilder.build(); 
    Request request1 = new Request.Builder().url(urlString).post(requestBody).build();