Не получается отправить в POST запросе видео на сервер

Нужно отправить видео на сервер. Запрос отправляется, но видео не загружается. Уже не знаю в чем дело. Сервер не ограничивает в размере, так же он не "увидит" файл, но ответ отдает. Далее прилагаю код: MainActivity.class:

public class MainActivity extends AppCompatActivity {
public static final String IMAGE_DIRECTORY_NAME = "Android File Upload";
Button button;
ImageView imageView;
private Uri fileUri;
private String postPath;

public static final int REQUEST_PICK_VIDEO = 3;
public ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView = (ImageView) findViewById(R.id.preview);
    button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent pickVideoIntent = new Intent(Intent.ACTION_GET_CONTENT);
            pickVideoIntent.setType("video/*");
            startActivityForResult(pickVideoIntent, REQUEST_PICK_VIDEO);
        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {

        if (requestCode == REQUEST_PICK_VIDEO) {
            if (data != null) {
                Toast.makeText(this, "Video content URI: " + data.getData(),
                        Toast.LENGTH_LONG).show();
                 Uri video = data.getData();
                uploadVideoToServer(video.getEncodedPath());

            }
        }
    }
    else if (resultCode != RESULT_CANCELED) {
        Toast.makeText(this, "Sorry, there was an error!", Toast.LENGTH_LONG).show();
    }

}


/**
 * returning video
 */


protected void showpDialog() {

    if (!pDialog.isShowing()) pDialog.show();
}

protected void hidepDialog() {

    if (pDialog.isShowing()) pDialog.dismiss();
}

private void uploadVideoToServer(String pathToVideoFile){

    File videoFile = new File(pathToVideoFile);
    RequestBody videoBody = RequestBody.create(MediaType.parse("video/*"), videoFile);
    MultipartBody.Part vFile = MultipartBody.Part.createFormData("video", videoFile.getName(), videoBody);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https:***")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    JsonPlaceHolderApi vInterface = retrofit.create(JsonPlaceHolderApi.class);
    Call<RequestBody>  serverCom = vInterface.upload(vFile);
    serverCom.enqueue(new Callback<RequestBody>() {
        @Override
        public void onResponse(Call<RequestBody> call, Response<RequestBody> response) {
            RequestBody result = response.body();

                Log.d(TAG, "Result " + result);

        }
        @Override
        public void onFailure(Call<RequestBody> call, Throwable t) {
            Toast.makeText(MainActivity.this, "Sorry, ther", Toast.LENGTH_LONG).show();
        }
    });
}}

Interace:

public interface JsonPlaceHolderApi {

@Multipart
@POST("upload")
Call<RequestBody> upload(@Part MultipartBody.Part video);}

При исследовании проблемы, получила вот это сообщение:java.io.filenotfoundexception: /document/video%: open failed: ENOENT (No such file or directory)


Ответы (1 шт):

Автор решения: Aiti

Собственно после некоторых танцев с бубнами, мне удалось решить проблему. Далее прилагаю рабочий код.

public class MeasurementActivity extends AppCompatActivity {

Button button;
ImageView imageView;
public static final int MEDIA_TYPE_IMAGE = 1;
private Uri fileUri;
private String postPath;

public static final int REQUEST_PICK_VIDEO = 1;
public ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_measurement);
    button = (Button) findViewById(R.id.button4);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent pickVideoIntent = new Intent(Intent.ACTION_GET_CONTENT);
            pickVideoIntent.setType("video/*");
            startActivityForResult(pickVideoIntent, REQUEST_PICK_VIDEO);
        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {

        if (requestCode == REQUEST_PICK_VIDEO) {
            if (data != null) {
                Toast.makeText(this, "Video content URI: " + data.getData(),
                        Toast.LENGTH_LONG).show();
                Uri video = data.getData();
                uploadVideoToServer(video.getPath());

            }
        }
    }
    else if (resultCode != RESULT_CANCELED) {
        Toast.makeText(this, "Sorry, there was an error!", Toast.LENGTH_LONG).show();
    }

}


/**
 * returning image / video
 */


protected void showpDialog() {

    if (!pDialog.isShowing()) pDialog.show();
}

protected void hidepDialog() {

    if (pDialog.isShowing()) pDialog.dismiss();
}

private void uploadVideoToServer(String pathToVideoFile){
    File videoFile = 
        new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + pathToVideoFile);


    RequestBody videoBody = RequestBody.create(MediaType.parse("video/*.mp4"), videoFile);
    MultipartBody.Part vFile = MultipartBody.Part.createFormData("video", videoFile.getName(), videoBody);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    GetData vInterface = retrofit.create(GetData.class);
    Call<Post>  serverCom = vInterface.upload(videoFile);
    serverCom.enqueue(new Callback<Post>() {
        @Override
        public void onResponse(Call<Post> call, Response<Post> response) {
            response.code();
            Toast.makeText(MeasurementActivity.this, "" + response.code(), Toast.LENGTH_LONG).show();
        }
        @Override
        public void onFailure(Call<Post> call, Throwable t) {

            Toast.makeText(MeasurementActivity.this, "Попробуйте снова." + t, Toast.LENGTH_LONG).show();
        }
    });
}}
→ Ссылка