2016-12-07 45 views
0

我正在尝试使用Dropbox V2 API将我的应用程序数据文件(SQLite和首选项)从我的Android应用程序上传到我的Dropbox帐户。我可以成功启动客户端:Dropbox V2 uploadBuilder:“字符串'路径'不匹配模式”

// 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"); 

我不知道足够的Java正则表达式使从正则表达式任何意义,所以我真的不知道是什么原因造成了我这个异常。 Dropbox API V2文档说“”表示Dropbox中应用程序的根文件夹,因此我的client.files()。uploadBuilder(“”)...应该是完美有效的代码。我也尝试在我的应用程序的Dropbox目录下创建一个子目录“test”,并将代码更改为client.files()。uploadBuilder(“test”)...但我每次都得到相同的异常。

任何人都可以帮我解释一下REGEX,这样可以让我知道我的代码出了什么问题吗?

+0

传入的字符串与模式不匹配是什么? –

+0

好问题,我没有答案。我只知道我试图传递给uploadBuilder()方法的内容:“”和“test”触发异常。我猜这个字符串可能是Windows文件路径,因为Dropbox文件夹不过是普通文件夹。 – user3062660

回答

6

您传递给uploadBuilder的参数应该是Dropbox中要上传文件的路径。你传递的是"",这是根本身,它不是文件上传的允许位置,因为它不包含文件名。

相反,您应该传入一个值,如"/test.txt",它会告诉Dropbox将内容作为名为“test.txt”的文件上传到根目录中。或者,例如,如果您指定"/Documents/test.txt",则它将作为名为“test.txt”的文件上载到名为“Documents”的文件夹中。

+0

这样做,谢谢一百万,格雷格! – user3062660

+0

我也打过。我的问题是路径需要以'/'开始 –