如何使用 Dropbox API V2 下载特定文件?
How to download certain file using Dropbox API V2?
我需要使用 DbxClientV2
从 Dropbox 下载某些 file/folder。我知道这个文件的路径,它总是一样的,所以我不想让用户选择它。我看过:
public void onFileClicked(final FileMetadata file) { }
但这似乎不是我要找的,我不知道如何使用文件路径创建 FileMetadata
对象。
我找不到任何有用的东西。我从 GitHub 得到了 sample class 但它仍然需要 FileMetadata
.
好吧,这花了我一些时间所以我 post 我的回答是给别人的。
当然你必须指定你想要保存它的地方(但这是显而易见的)然后创建 OutputStream
:
String path = Environment.getExternalStorageDirectory().toString() + "/DCIM";
File file = new File(path, "test.txt");
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
在此之后我们创建 Metadata
对象并初始化它,然后使用 metadata.getPathLower()
下载它。
try {
Metadata pathMetadata = client.files().getMetadata("/test.txt");
client.files().download(pathMetadata.getPathLower()).download(outputStream);
Log.e("METADATA", pathMetadata.toString());
} catch (DbxException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
奇怪的是 getPathLower()
returns "test.txt"
但是当我们在 download()
中输入它时 returns
java.lang.IllegalArgumentException: String 'path' does not match pattern
("/test.txt"
也不行)。
我花了很多时间让它工作,所以我希望我的回答能帮助别人节省这段时间。
编码愉快!
我需要使用 DbxClientV2
从 Dropbox 下载某些 file/folder。我知道这个文件的路径,它总是一样的,所以我不想让用户选择它。我看过:
public void onFileClicked(final FileMetadata file) { }
但这似乎不是我要找的,我不知道如何使用文件路径创建 FileMetadata
对象。
我找不到任何有用的东西。我从 GitHub 得到了 sample class 但它仍然需要 FileMetadata
.
好吧,这花了我一些时间所以我 post 我的回答是给别人的。
当然你必须指定你想要保存它的地方(但这是显而易见的)然后创建 OutputStream
:
String path = Environment.getExternalStorageDirectory().toString() + "/DCIM";
File file = new File(path, "test.txt");
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
在此之后我们创建 Metadata
对象并初始化它,然后使用 metadata.getPathLower()
下载它。
try {
Metadata pathMetadata = client.files().getMetadata("/test.txt");
client.files().download(pathMetadata.getPathLower()).download(outputStream);
Log.e("METADATA", pathMetadata.toString());
} catch (DbxException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
奇怪的是 getPathLower()
returns "test.txt"
但是当我们在 download()
中输入它时 returns
java.lang.IllegalArgumentException: String 'path' does not match pattern
("/test.txt"
也不行)。
我花了很多时间让它工作,所以我希望我的回答能帮助别人节省这段时间。
编码愉快!