如何使用 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" 也不行)。

我花了很多时间让它工作,所以我希望我的回答能帮助别人节省这段时间。

编码愉快!