我尝试使用Dropbox V2 API将我的应用数据文件(SQLite和偏好设置)从我的Android应用上传到我的Dropbox帐户。我可以成功启动客户端:
// Dropbox authentication
config = new DbxRequestConfig("dropbox/liikennevalot");
client = new DbxClientV2(config, ACCESS_TOKEN);
我的应用说该链接已启动,列出了我的用户凭据:
FullAccount account = client.users().getCurrentAccount();
我可以列出我的应用Dropbox目录中的文件:
ListFolderResult result = client.files().listFolder("");
while (true) {
for (Metadata metadata : result.getEntries()) {
Log.d("DROPBOX", metadata.getPathLower());
}
if (!result.getHasMore()) {
break;
}
result = client.files().listFolderContinue(result.getCursor());
}
但是当尝试使用
从Android上传到Dropbox应用程序根目录时try (InputStream in = new FileInputStream(getExternalFilesDir(null) + "/" + "testi.txt")) {
FileMetadata metadata = client.files().uploadBuilder("")
.withMode(WriteMode.OVERWRITE)
.uploadAndFinish(in);
}
我得到了一个例外
java.lang.IllegalArgumentException: String 'path' does not match pattern
指向client.files()。uploadBuilder("")...
的代码行检查异常堆栈,我发现在Dropbox API V2中,类CommitInfo有一个构造函数,它给了我这个异常
} else if(!Pattern.matches("(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)", path)) {
throw new IllegalArgumentException("String \'path\' does not match pattern");
我不知道从那个REGEX中获得足够的Java REGEX,所以我真的不知道是什么导致了我这个异常。 Dropbox API V2文档说""表示应用程序在Dropbox中的根文件夹,所以我的client.files()。uploadBuilder("")...应该是完美的有效代码。
我还试图创建一个子目录" test"在我的应用程序的Dropbox目录下,将代码更改为client.files()。uploadBuilder(" test")...但每次都会得到相同的异常。
任何人都可以帮我解释那个REGEX,这样可以给我一个关于我的代码有什么问题的线索吗?
答案 0 :(得分:11)
您传递给uploadBuilder
的参数应该是Dropbox中要上传文件的路径。您正在传递""
这是根本身,它不是文件上传的允许位置,因为它不包含文件名。
相反,你应该传递一个像"/test.txt"
这样的值,它会告诉Dropbox将内容上传为名为" test.txt"的文件。在根。
或者,例如,如果您指定"/Documents/test.txt"
,它将上传为名为" test.txt"的文件。在名为" Documents"。