2016-12-07 4 views
0

Я пытаюсь использовать Dropbox V2 API для загрузки файлов приложений (SQLite и предпочтений) из моего приложения Android в мою учетную запись Dropbox. Я могу успешно запустить клиент:Dropbox V2 uploadBuilder: «String« path »не соответствует шаблону«

// 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 REGEX, чтобы сделать какой-то смысл от этого Regex, так что я действительно не знаю, что вызывает у меня это исключение , Документация Dropbox API V2 гласит, что «» представляет корневую папку приложения в Dropbox, поэтому мой client.files(). UploadBuilder («») ... должен быть совершенным корректным кодом.

Я также попытался создать подкаталог «test» в папке Dropbox моего приложения и изменить код на 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» в папку с именем «Документы».

+0

Это сделало трюк, спасибо миллион, Грег! – user3062660

+0

Я тоже ударил. Моя проблема заключалась в том, что путь должен начинаться с символа '/' –

 Смежные вопросы

  • Нет связанных вопросов^_^