Dropbox V2 uploadBuilder:"String 'path' does not match pattern"
Dropbox V2 uploadBuilder: "String 'path' does not match pattern"
我正在尝试使用 Dropbox V2 API 将我的应用程序数据文件(SQLite 和首选项)从我的 Android 应用程序上传到我的 Dropbox 帐户。我可以成功启动客户端:
// Dropbox authentication
config = new DbxRequestConfig("dropbox/liikennevalot");
client = new DbxClientV2(config, ACCESS_TOKEN);
我的应用程序说 link 已启动,列出我的用户凭据:
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 中,class CommitInfo 有一个构造函数,它给了我这个异常
} else if(!Pattern.matches("(/(.|[\r\n])*)|(ns:[0-9]+(/.*)?)", path)) {
throw new IllegalArgumentException("String \'path\' does not match pattern");
我对 Java REGEX 的了解还不够,无法从该 REGEX 中理解任何意义,所以我真的不知道是什么导致了我这个异常。 Dropbox API V2 文档说“”代表应用程序在 Dropbox 中的根文件夹,所以我的 client.files().uploadBuilder("")... 应该是完美有效的代码。
我也尝试在我的应用程序的 Dropbox 目录下创建一个子目录 "test",并将代码更改为 client.files().uploadBuilder("test")... 但是我每次都得到相同的异常。
任何人都可以帮助我解释该 REGEX 以便给我提供有关我的代码有什么问题的线索吗?
您传递给 uploadBuilder
的参数应该是您要上传文件的 Dropbox 中的路径。您传入的 ""
是根目录本身,它不是文件上传的允许位置,因为它不包含文件名。
相反,您应该传递一个像 "/test.txt"
这样的值,它会告诉 Dropbox 将内容上传为根目录中名为 "test.txt" 的文件。
或者,例如,如果您指定 "/Documents/test.txt"
,它将作为名为 "test.txt" 的文件上传到名为 "Documents".
的文件夹中
我正在尝试使用 Dropbox V2 API 将我的应用程序数据文件(SQLite 和首选项)从我的 Android 应用程序上传到我的 Dropbox 帐户。我可以成功启动客户端:
// Dropbox authentication
config = new DbxRequestConfig("dropbox/liikennevalot");
client = new DbxClientV2(config, ACCESS_TOKEN);
我的应用程序说 link 已启动,列出我的用户凭据:
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 中,class CommitInfo 有一个构造函数,它给了我这个异常
} else if(!Pattern.matches("(/(.|[\r\n])*)|(ns:[0-9]+(/.*)?)", path)) {
throw new IllegalArgumentException("String \'path\' does not match pattern");
我对 Java REGEX 的了解还不够,无法从该 REGEX 中理解任何意义,所以我真的不知道是什么导致了我这个异常。 Dropbox API V2 文档说“”代表应用程序在 Dropbox 中的根文件夹,所以我的 client.files().uploadBuilder("")... 应该是完美有效的代码。
我也尝试在我的应用程序的 Dropbox 目录下创建一个子目录 "test",并将代码更改为 client.files().uploadBuilder("test")... 但是我每次都得到相同的异常。
任何人都可以帮助我解释该 REGEX 以便给我提供有关我的代码有什么问题的线索吗?
您传递给 uploadBuilder
的参数应该是您要上传文件的 Dropbox 中的路径。您传入的 ""
是根目录本身,它不是文件上传的允许位置,因为它不包含文件名。
相反,您应该传递一个像 "/test.txt"
这样的值,它会告诉 Dropbox 将内容上传为根目录中名为 "test.txt" 的文件。
或者,例如,如果您指定 "/Documents/test.txt"
,它将作为名为 "test.txt" 的文件上传到名为 "Documents".