How do you upload a video (.mp4) file in the raw folder to a server on a button click in java android studio with minSdk 29.
Any help with this would be much appreciated.
This is what I have tried:
private void configureUploadButton() {
uploadButton = findViewById(R.id.uploadButton);
uploadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// creating a client
OkHttpClient okHttpClient = new OkHttpClient();
int videoResourceId = getResources().getIdentifier("name_of_video", "raw", getPackageName());
Uri fileUri = Uri.parse("android.resource://" + getPackageName() + "/" + videoResourceId);
Log.i("URI", "File URI: " + fileUri);
File videoFile = new File(fileUri.getPath());
Log.i("FILE_TAG", "File: " + videoFile + " Path: " + videoFile.getPath());
RequestBody requestBody = RequestBody.create(MediaType.parse("video/mp4"), videoFile);
MultipartBody multipartBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("video", videoFile.getName(), requestBody)
.build();
Request request = new Request.Builder()
.url("http://10.0.2.2:5000/upload_video")
.post(multipartBody)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i("SERVER_DOWN", "The sever is down: " + e.getMessage());
Toast.makeText(Record.this, "server down", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
runOnUiThread(new Runnable() {
@Override
public void run() {
int responseCode = response.code();
String responseMessage = response.message();
Log.i("RESPONSE", "Response code: " + responseCode + " Message: " + responseMessage);
if (response.isSuccessful()) {
Toast.makeText(Record.this, "Connected to server successfully.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(Record.this, "Not able to connect to server.", Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
});
}
I don't seem to be accessing the file correctly using the File class. The IOException that I am getting in the onFailure of the okHttpClient call is:
/2131689473: open failed: ENOENT (No such file or directory)
These are the permissions that I have in my Androidmanifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.hardware.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>