我想在使用Retrofit上传到服务器之前压缩视频。我已尝试在stackoverflow上发布所有可能的解决方案,但仍然得到相同的异常。但是,当API被击中时,它会抛出异常,如下所述:
java.io.FileNotFoundException:/data/user/0/com.flexyn.debug/files/mydir(是一个目录)
以下是我用来将文件保存到内部存储的方法:
private File convertVideoPathToFile() {
FileOutputStream outputStream = null;
file = new File(getFilesDir(),"flexyn_video");
if (!file.exists()) {
file.mkdirs();
}else if(!file.isDirectory() && file.canWrite()){
file.delete();
file.mkdirs();
}
try {
outputStream = openFileOutput(file.getName(), Context.MODE_PRIVATE);
outputStream.write(videoPath.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return file;
}
以下是调用API以将视频上传到服务器的方法:
@覆盖
public void saveVideoPost(File file) {
if (mView == null) {
return;
}
mView.showLoadingLayout();
ApiInterface apiInterface= ApiClient.getClient().create(ApiInterface.class);
final RequestBody requestBody = RequestBody.create(MediaType.parse("video/*"), file);
RequestBody caption = RequestBody.create(MediaType.parse("text/plain"), mView.getCaption());
RequestBody privacy = RequestBody.create(MediaType.parse("text/plain"), mView.getPrivacyStatus());
MultipartBody.Part imageFileBody = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
apiInterface.postActivity(tags_ids.toString(),FlexynApplication.getInstance().getUserToken(),imageFileBody, caption, privacy)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<DefaultResponse>() {
@Override
public void call(DefaultResponse responseBody)
{
if(responseBody.getError_code()==200 && responseBody.isSuccess()){
mView.hideLoadingLayout();
Log.d(TAG, "uploaded successfully " +responseBody.getMessage());
success(responseBody);
}else{
mView.hideLoadingLayout();
error(responseBody.getMessage());
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
// throwing error here
mView.hideLoadingLayout();
error(AppConstant.ERROR_MESSAGE1);
}
});
}