2016-12-07 43 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

我也打過。我的問題是路徑需要以'/'開始 –