Загрузите файл из папки Dropbox, сохраните на SD-карту, используя асинхронную задачу в Android, не работающую

1. Я хочу загрузить определенный файл из папки Dropbox в Android, а затем сохранить на локальную SD-карту.

2. Я назвал DBRoulette Примером загрузки случайных изображений из Dropbox.

Кроме того, я пробовал код ниже, но не получил никакого решения для загрузки файла.

Пожалуйста, помогите мне.

Ссылка, на которую я ссылался – этот код Загрузите изображения случайным образом.

private boolean downloadDropboxFile(String dbPath, File localFile) throws IOException{

    BufferedInputStream br = null;
    BufferedOutputStream bw = null;

    try {
        if (!localFile.exists()) {
            localFile.createNewFile(); //otherwise dropbox client will fail silently
        }

        FileDownload fd = api.getFileStream("dropbox", dbPath, null);
        br = new BufferedInputStream(fd.is);
        bw = new BufferedOutputStream(new FileOutputStream(localFile));

        byte[] buffer = new byte[4096];
        int read;
        while (true) {
        read = br.read(buffer);
        if (read <= 0) {
        break;
        }
        bw.write(buffer, 0, read);
        }
    } finally {
        //in finally block:
        if (bw != null) {
            bw.close();
        }
        if (br != null) {
            br.close();
        }
    }

    return true;
}

person Kumar    schedule 17.07.2015    source источник
comment
but not Getting any Solution. ??? Вы хотите получить файл, не так ли? Что вы получаете вместо этого? Пожалуйста, покажите, как вы вызываете downloadDropboxFile(); Глядя на пример BDRoulette, вы должны получить правильный код.   -  person greenapps    schedule 17.07.2015
comment
iam получает случайное изображение в коде загрузки DBroutlle, не получая указанный файл. Я хочу загрузить определенный файл из Dropbox, а затем сохранить в папку Sdcard. ты можешь мне помочь @greenapps   -  person Kumar    schedule 17.07.2015


Ответы (3)


Вы можете использовать следующие два метода для копирования файлов из каталога dropbox в новый каталог.

public static final void copyDirectory(File dropboxfile, File newfile) throws IOException {

    newfile.mkdirs();
    File[] files = dropboxfile.listFiles();

    for (File file : files) {
        if (file.isDirectory()) {
            copyDirectory(file, new File(newfile, file.getName()));

        } else {
            copyFile(file, new File(newfile, file.getName()));
        }
    }
}


public static final void copyFile(File source, File destination) throws IOException {
    FileChannel sourceChannel = new FileInputStream(source).getChannel();
    FileChannel targetChannel = new FileOutputStream(destination).getChannel();
    sourceChannel.transferTo(0, sourceChannel.size(), targetChannel);
    sourceChannel.close();
    targetChannel.close();
}

Вы можете получить файл dropbox следующим образом:

File dropboxfile = new File(root_to_dropbox_file, file_name);

И новый файл на SD-карте можно создать следующим образом:

String root = Environment.getExternalStorageDirectory().toString();
File newfile = new File(root + "/selected_name");     

И последнее, но не менее важное: добавьте следующие разрешения в файл манифеста Android:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<android:uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="18"/>
person Alexios Karapetsas    schedule 17.07.2015
comment
Здесь я должен получить файл изображения из Dropbox, сохранить его в SDCARD. - person Kumar; 20.07.2015
comment
пожалуйста, отредактируйте этот код, я не могу скачать файл. пожалуйста, объясните мне, какой метод загрузки файла тогда, как сохранить файл загрузки в SDCard. - person Kumar; 20.07.2015

Dropbox Android Core SDK предлагает два метода загрузки содержимого файла. Ссылки на документацию здесь:

В обоих первый параметр — это путь в Dropbox к файлу, который вы хотите скачать. Пример приложения DBRoulette выбирает файлы случайным образом, но в реальных случаях использования вы должны указать определенный путь, например, для определенного файла, выбранного пользователем. Например, вы можете получить информацию о том, какие файлы доступны, используя:

В руководстве Dropbox Android Core SDK также есть небольшой пример:

https://www.dropbox.com/developers/core/start/android#downloading

В этом примере кода осуществляется доступ к файлу, существующему в Dropbox по адресу /magnum-opus.txt.

person Greg    schedule 17.07.2015
comment
Файл файл = новый файл (/magnum-opus.txt); FileOutputStream outputStream = новый FileOutputStream(файл); Информация о DropboxFileInfo = mDBApi.getFile(/magnum-opus.txt, null, outputStream, null); Log.i(DbExampleLog, Версия файла: + info.getMetadata().rev); этот код, я получаю исключение «Файл не найден», пожалуйста, помогите мне. - person Kumar; 20.07.2015
comment
У вас есть файл в связанном Dropbox по адресу /magnum-opus.txt? - person Greg; 20.07.2015
comment
я пробовал с другим файлом, также я получаю исключение "файл не найден" - person Kumar; 21.07.2015

Вставьте dropboxchooser sdk в свой проект и используйте этот код. Откроется диалоговое окно Dropbox и вы увидите список файлов. Выбранный файл будет загружен в память вашего телефона.

private DbxChooser mChooser;
private final int DBX_CHOOSER_REQUEST = 2020;

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
    setContentView(R.layout.activity_main);
    mChooser.forResultType(DbxChooser.ResultType.FILE_CONTENT)
            .launch(DropBoxDemo.this, DBX_CHOOSER_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == DBX_CHOOSER_REQUEST)
    {
        if(resultCode==RESULT_OK)
        {
            DbxChooser.Result result = new DbxChooser.Result(data);
            Log.d("dropbox", "Link to selected file: " + result.getLink());
            Log.d("dropbox", "Icon to selected file: " + result.getIcon());
            Log.d("dropbox", "Name to selected file: " + result.getName());
            Log.d("dropbox", "Size to selected file: " + result.getSize());
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}
person Dharmik Mavani    schedule 17.07.2015
comment
Я не хочу ничего выбирать. Просто нужно отправить запрос в Dropbox Скачать файл с именем файла - person Kumar; 17.07.2015