Загрузка вложений Android через HTTPS - PullRequest
1 голос
/ 13 января 2011

Как мое приложение может попросить пользователя выбрать файл и затем загрузить этот файл на сервер? Файл будет загружен из браузера или загружен с сохраненной камеры.

Я ожидаю, что пользователь выберет файл, используя любой файловый браузер, который проверит папку, в которую записывают эти две вещи. Затем я сохраню путь к файлу и выполню загрузку во время отправки электронного письма.

Подскажите, пожалуйста, как выбрать файл и есть ли способ загрузить файл с помощью HttpPost. (если нет, я напишу отдельный код загрузки, но мне все еще нужно будет, чтобы пользователь мог выбрать файл.)

Редактировать: Найден код выбора файла из исходного кода приложения для электронной почты Android . Существует какой-то встроенный инструмент выбора файлов, который использует идентификаторы вместо обычной файловой системы. Приложение отфильтровало его по типу image / *, но если вы удалите этот фильтр, оно спросит, следует ли ему использовать галерею (которая имеет ссылку на меню на камеру) или использовать звуковой файл или записать новый звуковой файл. Начальное место src/com/android/email/activity/MessageCompose.java. Метод onOptionsItemSelected и имеет switch case: для вложений.

Редактировать: Решение

Оказывается, что Android SDK включает в себя только часть библиотеки apache и поэтому HttpClient не существует. Вместо этого я получу данные для загрузки с несколькими запросами и внесу данные Base64 в один из параметров POST.

Ответы [ 2 ]

2 голосов
/ 14 января 2011
  1. На Android нет выделенного средства выбора файлов, поэтому вы должны создать свой собственный: Как создать средство выбора файлов в Android?

  2. Вы не указали протокол, когда сказали, что нужно загрузить на сервер, поэтому я предполагаю, что вы имеете в виду классическую загрузку файла Http (POST с составной панелью MIME).Пример взят из здесь .

    try {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        File f = new File(filename);
    
        HttpPost httpost = new HttpPost("http://myremotehost:8080/upload/upload");
        MultipartEntity entity = new MultipartEntity();
        entity.addPart("myIdentifier", new StringBody("somevalue"));
        entity.addPart("myFile", new FileBody(f));
        httpost.setEntity(entity);
    
        HttpResponse response;
    
        response = httpclient.execute(httpost);
    
        Log.d("httpPost", "Login form get: " + response.getStatusLine());
    
        if (entity != null) {
            entity.consumeContent();
        }
        success = true;
    } catch (Exception ex) {
        Log.d("FormReviewer", "Upload failed: " + ex.getMessage() +
            " Stacktrace: " + ex.getStackTrace());
        success = false;
    } finally {
         mDebugHandler.post(mFinishUpload);
    } 
    
0 голосов
/ 13 января 2011

Да, вы можете выполнять загрузку файлов, используя HttpPost. Вот несколько примеров использования:

org.apache.commons.httpclient.HttpClient

Существует множество примеров того, как сделать это на Java. Однако убедитесь, что в любом из рассмотренных вами примеров используется более новая версия 4.x HttpClient, а не более старые версии 3.x.

Не уверен в части выбора файла.

...