使用ftpClient的Android文件上传获取URI而不是文件选择器的真实路径

时间:2019-08-29 11:54:43

标签: java android apache android-studio ftp

我想编写一个Android应用程序,将文件上传到FTP服务器。

我使用Apache Commons FTP库进行FTP连接。

当我使用硬编码的文件路径到本地文件时,它会按预期工作。

这是我的代码:

public String file = "/storage/emulated/0/test.txt";


...


FTPClient ftpClient = new FTPClient();
ftpClient.connect(host);
int reply = ftpClient.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)){
            Toast.makeText(getApplicationContext(), "FTP server refused connection.", Toast.LENGTH_SHORT).show();
}

ftpClient.login(user, password);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();

InputStream fis = new FileInputStream(file);
ftpClient.storeFile("/test.txt", fis);
fis.close();

ftpClient.logout();
ftpClient.disconnect();

如您所见,我使用了本地文件的完整路径,并为远程文件指定了相同的文件名。

现在,我要让用户选择文件。

我用过:

Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("*/*");
chooseFile = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(chooseFile, PICKFILE_RESULT_CODE);

并且:

public void onActivityResult(int requestCode, int resultCode, Intent data) {

switch (requestCode) {
case PICKFILE_RESULT_CODE:
if (resultCode == -1) {

Uri fileUri = data.getData();
file = fileUri.getPath();

问题:

我的变量“文件”为我提供了“ / document / image:138031”,而不是文件的实际路径。

我现在如何获取真实的文件路径?

我读了一些有关将URI转换为路径的内容,但是我发现的所有示例都非常古老,并且无法与API29(Pie)一起使用。

有人可以帮助我吗?

提前谢谢!

0 个答案:

没有答案