2017-11-04 29 views
0

私はRetrofitを初めて使い、過去2日間に大きな問題を抱えています。デバイスカメラからXAMPPサーバーにビデオを送信したいアップロードされた動画を移動しなければならないRetrofit - XAMPPにビデオをアップロード

PHPの一部:

$returnArray = array(); 
$videoUploadResult = ""; 

$target_dir ="/Applications/XAMPP/xamppfiles/htdocs/Projects/Eventtest/videos"; 
if(!file_exists($target_dir)) { 
    mkdir($target_dir, 0777, true); 
} 

$target_file_name = $target_dir . "/" . basename($_FILES["filename"]["name"]); 


if(move_uploaded_file($_FILES["filename"]["tmp_name"], $target_file_name)) { 
    $returnArray["video_upload_status"] = "Video uploaded successfully"; 
} else { 
    $returnArray["status"] = 400; 
    $returnArray["message"] = "Couldn't upload the video"; 

    echo json_encode($returnArray); 
} 
exit; 

インタフェース:

public interface ServerInterface { 
    @GET("getEvents.php") 
    Call<List<JSONData>> getEvent(@Query("result") String tag); 

    @POST("createEvent.php") 
    //@FormUrlEncoded 
    @Multipart 
    Call<ResponseBody> uploadVideo(@Part("description") RequestBody description, @Part MultipartBody.Part file); 

コード:

ServerInterface = APIClient.getClient().create(ServerInterface.class); 


    RequestBody requestFile = 
      RequestBody.create(
        MediaType.parse("video/mp4"), 
        videoFile 
      ); 
    MultipartBody.Part body = 
      MultipartBody.Part.createFormData("filename", videoFile.getName(), requestFile); 

    // add another part within the multipart request 
    String descriptionString = "hello, this is description speaking"; 
    RequestBody description = 
      RequestBody.create(
        MultipartBody.FORM, descriptionString); 

    // finally, execute the request 
    Call<ResponseBody> call = serverInterface.uploadVideo(description, body); 
    call.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, 
           Response<ResponseBody> response) { 
      Log.v("Upload", "success"); 
     } 

     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) { 
      Log.e("Upload error:", t.getMessage()); 
     } 
    }); 

私はビデオファイルを送信するとき、PHPサーバーの一部が動作しますmove_uploaded_file($ _ FILES ["filename"] ["tmp_name"]のように、キー "filename"を持つPostmanを介して。

私は別の例を試しましたが、これは特にhttps://futurestud.io/tutorials/retrofit-2-how-to-upload-files-to-server から送信されました。文字列とファイルでマップを送信しようとしましたが、成功しませんでした。

問題は、ログにエラーがないことです。しかし、私は正確に、問題がmove_uploaded_file($ _ファイル["ファイル名"] ["tmp_name"]に達するとすぐに発生することを知っています

答えて

0

私はついに問題と解決策を見つけました まず、 動画私のXAMPPのが。私は、Macを使っている読み取り専用と読むにフォルダの共有とアクセス権プロパティを変更し、

第二情報を見るを書くた、私は方法を見つけましたキーファイルのペアを自分のPHPコードにマップするには、 "filename"が私の鍵であるmove_uploaded_file($ _ FI LES [ "ファイル名"] [ "tmp_name"]: インタフェース:

@POST("createEvent.php") 
@Multipart 
Call<ResponseBody> uploadVideo(@Part MultipartBody.Part file, @Part("filename") RequestBody name); 

コード:

serverInterface = APIClient.getClient().create(ServerInterface.class); 
    RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), videoFile); 
    MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("filename", videoFile.getName(), requestBody); 
    RequestBody filename = RequestBody.create(MediaType.parse("text/plain"), videoFile.getName()); 


    Call<ResponseBody> call = serverInterface.uploadVideo(fileToUpload, filename); 
call.enqueue(......) // onResponse(), onFailure() goes here 
enter code here 
関連する問題