Загрузка изображений на сервер PHP с Android - PullRequest
6 голосов
/ 30 марта 2010

Мне нужно загрузить изображение на удаленный сервер PHP, который ожидает следующие параметры в HTTPPOST:

*$_POST['title']*
*$_POST['caption']*
*$_FILES['fileatt']*

Большинство поисковых запросов в Интернете предлагали либо:

Загрузите следующие классы и попытайтесь MultiPartEntity отправить запрос:

apache-mime4j-0.5.jar
httpclient-4.0-beta2.jar
httpcore-4.0-beta3.jar
httpmime-4.0-beta2.jar

ИЛИ

Используйте URLconnection и обрабатывайте многокомпонентные данные самостоятельно.

Кстати, я заинтересован в использовании класса HttpClient, а не классов java.net (или это android.net). В конце концов я скачал классы Multipart из исходного кода Android и использовал их в своем проекте.

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

Как правильно сделать это в приложении для Android?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 02 апреля 2010

Похоже, что исходный код Android поставляется с внутренней многокомпонентной вспомогательной библиотекой. Смотрите это сообщение . На первый взгляд, это лучше документировано, чем множество общедоступных API (кашель, кашель, SoundPool, кашель), так что это должно быть довольно хорошее место для начала, или, возможно, хорошо просто использовать встроенное решение.

4 голосов
/ 20 апреля 2010

Может быть, эта запись в официальной группе Android помогает. Парень использует mime4j.

Другим полезным ресурсом может быть этот пример в книге Pro Android.

3 голосов
/ 30 марта 2010

Я делаю именно это для взаимодействия с сервером хостинга изображений (реализованным также в php), который ожидает параметры, как если бы они были размещены на html-странице.

Я создаю List<NameValuePair> своих ключей и значения примерно так:

    List<NameValuePair> params = new ArrayList<NameValuePair>(2);
    params.add(new BasicNameValuePair(key1, value1));
    params.add(new BasicNameValuePair(key2, value2));

и затем я передаю его своему классу помощника http, который устанавливает свойство HttpEntity моего запроса HttpPost. Вот метод прямо из моего вспомогательного класса:

public static HttpResponse Post(String url, List<NameValuePair> params, Context context)
{
    HttpResponse response = null;
    try
    {
        HttpPost request = new HttpPost();
        request.setURI(new URI(url));
        if(params != null)
            request.setEntity(new UrlEncodedFormEntity(params));
        HttpClient client = ((ApplicationEx)context.getApplicationContext()).getHttpClient();
        response = client.execute(request);
    }
    catch(Exception ex)
    {
        // log, etc
    }
    return response;
}
...