java.io.FileNotFoundException在使用Retrofit将视频文件上传到android中的服务器时

时间:2018-05-04 08:03:22

标签: android video server retrofit2

我想在使用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);
                    }
                });
    }

0 个答案:

没有答案