2017-09-29 95 views
1

我正在开发一个文件上传android应用程序。我的目标是将用户选择的文件从文件管理器上传到远程服务器。但是,当谷歌驱动器文件被选中,文件上传失败,因为空路径。有人能帮助我吗?谷歌驱动器文件的文件路径为空

我的代码是:

private void showFileChooser() { 
    Intent intent = new Intent(); 
    intent.setType("*/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); 
    startActivityForResult(Intent.createChooser(intent, "Choose File to Upload.."), PICK_FILE_REQUEST); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == PICK_FILE_REQUEST) { 
      if (data == null) { 
       //no data present 
       return; 
      } 
      Uri selectedFileUri = data.getData(); 
      selectedFilePath = FilePath.getPath(mActivity, selectedFileUri); 
      if (selectedFilePath != null && !selectedFilePath.equals("")) { 
       callUploadDocumentAPI(); 
      } else { 
       Toast.makeText(mActivity, StringConstants.CANT_UPLOAD_TO_SERVER, Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
+0

你能分享你的代码吗? – notyou

+0

我已经在问题中编写了我的代码 – Abhi

+0

'callUploadDocumentAPI()'不带任何参数?如何使用'selectedFilePath'? – Kristopher

回答

0

但是,当选择了谷歌驱动文件,文件上传失败,因为空路径。

FilePath.getPath(mActivity, selectedFileUri)无法正常工作。 A Uri不是一个文件。

使用ContentResolveropenInputStream()得到Uri标识的内容InputStream。直接使用InputStream,或使用它在您控制的某个文件中制作自己的内容副本,然后使用该副本。

+0

有想法,谢谢 – Abhi