2017-11-03 14 views
0

私は改造で新たなんだを使用してマルチパートアップロードを失敗したと私は改造2を使用してアップロードしたいすべての応答は、PHPからではなく、場合は改造2

失敗アップロード

あるファイルをアップロード私は常に成功したPostmanを使っています。

以下は私のコードです。

主な活動

File zip = new File(Environment.getExternalStorageDirectory() + "/test.zip"); 
      RequestBody reqBody = RequestBody.create(MediaType.parse("multipart/form-file"), zip); 
      MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", zip.getName(), reqBody); 

      ApiServices api = RetroClient.getApiServices(); 
      Call<ResponseApiModel> upload = api.fileUpload(filePart); 
      upload.enqueue(new Callback<ResponseApiModel>() { 
       @Override 
       public void onResponse(Call<ResponseApiModel> call, Response<ResponseApiModel> response) { 

        if (response.body().getCode().equals("1")) { 
         Toast.makeText(MainActivity.this, response.body().getMessage(), Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(MainActivity.this, response.body().getMessage(), Toast.LENGTH_SHORT).show(); 

        } 
       } 

       @Override 
       public void onFailure(Call<ResponseApiModel> call, Throwable t) { 
        Log.d("RETRO", "ON FAILURE : " + t.getMessage()); 
       } 
      }); 

APIサービス

@Multipart 
@POST("getzip.php") 
Call<ResponseApiModel> fileUpload (@Part MultipartBody.Part File); 

PHPコード

$part = "./upload/"; 
$filename = rand(9,9999).".zip"; 

$res = array(); 
$code = ""; 
$message = ""; 


if($_SERVER['REQUEST_METHOD'] == "POST") 
{ 
    if(isset($_FILES['file'])){ 
     $destinationfile = $part.$filename; 
     $data = $_FILES['file']; 
     if(move_uploaded_file($data['tmp_name'], $destinationfile)) { 
      $code = 1; 
      $message = "Success Upload"; 
     }else { 
      $code = 0; 
      $message = "Fail Upload"; 
      } 
    }else{ 
     $code = 0; 
     $message = "request error"; 
    } 
}else 
{ 
    $code = 0; 
    $message = "Request Not Vaild"; 
} 

$res['code'] = $code; 
$res['message'] = $message; 

echo json_encode($res); 
+0

以下のコードサンプルがマルチパート形式ここで

を使用する必要がある「失敗のアップロードは、」 'てみてください。..ダンプをチェックし、ファイル$ _FILES [「ファイル」]をダンプ'$ message =" Fail Upload ";' on_response内のAndroidアプリケーションにメッセージを記録し、エラー処理を改善します。response.code == 200 onResponse 。 –

+0

このブログを読む、https://mobikul.com/uploading-number-files-using-retrofit-multipart-request/ –

答えて

0

あなたはすべてを確認することができますトン彼は与えられた提案in this answer。問題をデバッグする方法についての良いアイデアだけでなく、間違っている可能性のあるものに関するいくつかの本当に良いアイデアがあるので、すべての答えとコメントを確認してください。私はPHPを知らないが、私はここに

レトロフィット知っ

1

は、私はそれを行う方法であると完璧に動作しますが、これは全体のフォルダをアップロードし、uがウルファイルを処理するために、それに応じて変更されることがあります。

は、あなたが代わりに返すの

@Multipart 
    @POST("sync/contact/image") 
    Call<Response> ImageUpload(@Part MultipartBody.Part file); 

    @Multipart 
    @POST("sync/image") 
    Call<ResponseBody> MultiImageUpload(@PartMap() Map<String, RequestBody> mapFileAndName); 


public static HashMap<String, RequestBody> GetAllImage(Context context) { 
     File files = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "/.ELMEX"); 
     File[] filesArray = files.listFiles(); 
     List<File> listOfNames = Arrays.asList(filesArray); 
     HashMap<String, RequestBody> map = new HashMap<>(listOfNames.size()); 
     RequestBody file = null; 

     for (int i = 0, size = listOfNames.size(); i < size; i++) { 
      file = RequestBody.create(MediaType.parse("multipart/form-data"), listOfNames.get(i)); 
      map.put("file\"; filename=\"" + listOfNames.get(i).getName() + ".jpg", file); 
      file = null; 
     } 

     return map; 
    } 


HashMap<String, RequestBody> map = UtilImage.GetAllImage(context); 

     Call<ResponseBody> call = Retro.getRetroWS().MultiImageUpload(map); 
     call.enqueue(new Callback<ResponseBody>() { 
      @Override 
      public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
       Log.d(TAG, "onResponse: "); 
      } 

      @Override 
      public void onFailure(Call<ResponseBody> call, Throwable t) { 
       Log.d(TAG, "onFailure: "); 
      } 
     });