English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Пример реализации функции загрузки и скачивания изображений на Android

Пример

При реализации клиента веб-сервиса Android, например, клиента мыibo, форума, часто используется загрузка и скачивание изображений. В этом разделе рассматривается, как использовать HttpClient для реализации функции загрузки и скачивания изображений.

1 Загрузка изображенияПри загрузке изображения, сначала получить путь к изображению, создать файл и преобразовать изображение в поток байтов,写入 в request и отправить этот запрос.

Клиентский код:

File file = new File(imageUrl);
String httpUrl = httpDomain + "AddImageServlet" + "?gid=" + gid;
HttpPost request = new HttpPost(httpUrl);
HttpClient httpClient = new DefaultHttpClient();
FileEntity entity = new FileEntity(file, "binary/octet-stream");
HttpResponse response;
try {
  request.setEntity(entity);
  entity.setContentEncoding("binary/octet-stream");
  response = httpClient.execute(request);
// если возвращенный статус равен 200, получить возвращенный результат
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
……// Загрузка изображения успешна
}
}
catch (Exception e) {
}

Работа на сервере заключается в приеме этого потока байт,写入文件, и сохранении файла в соответствующей папке на сервере, а также записи пути к файлу и写入数据库 для сохранения пути к изображению файла.

Код на сервере:

// Получение идентификатора новости
String gid = request.getParameter("gid");
String filePath = getRealPath(request) + "\\userpic\\";
//   Определение максимального размера загружаемого файла в байтах
int MAX_SIZE = 102400 * 102400;
//   Объявление класса для чтения файла
DataInputStream in = null;
FileOutputStream fileOut = null;
//   Получение типа данных загруженного клиентом
String contentType = request.getContentType();
if (contentType.indexOf("binary/octet-stream") >= 0) {
  //   Чтение загруженных данных
  in = new DataInputStream(request.getInputStream());
  int formDataLength = request.getContentLength();
  //   Если изображение слишком велико
  if (formDataLength > MAX_SIZE) {
    String errormsg = ("Размер загруженного файла не может превышать " + MAX_SIZE);
    out.println(errormsg);
    return;
  }
//   Сохранение данных загруженного файла
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
//   Загрузленные данные сохраняются в массиве байт
while (totalBytesRead < formDataLength) {
byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
totalBytesRead += byteRead;
 }
String fileName = filePath + gid+".png";
 //   检查上载文件的目录是否存在
File fileDir = new File(filePath);
if(!fileDir.exists()){
fileDir.mkdirs();
}
//   创建文件的写出类
fileOut = new FileOutputStream(fileName);
//   保存文件的数据
fileOut.write(dataBytes);
fileOut.close();
//保存文件的路径名
……

2 图片下载:首先获得网络图片的图片地址,发送请求后,服务器将会返回该图片的字节流,利用BitmapFactory.decodeStream()方法将字节流转化为图片并返回。具体代码如下:

//获得网络中的图片
public Bitmap getGossipImage(String gid){
    String httpUrl = httpDomain+"userpic/"+gid+".png";
    Bitmap bitmap = null;
    HttpGet httpRequest = new HttpGet(httpUrl);
    //取得HttpClient 对象
    HttpClient httpclient = new DefaultHttpClient();
    try {
      //请求httpClient ,取得HttpRestponse
      HttpResponse httpResponse = httpclient.execute(httpRequest);
      if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
        //取得相关信息 取得HttpEntiy
        HttpEntity httpEntity = httpResponse.getEntity();
        InputStream is = httpEntity.getContent();
        bitmap = BitmapFactory.decodeStream(is);
        is.close();
      } else {
         Toast.makeText(context, "Ошибка подключения!", Toast.LENGTH_SHORT).show();
      }
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return bitmap;
}

Читатели, интересующиеся дополнительной информацией о Android, могут ознакомиться с专题ами на нашем сайте: "Суммарные советы по обработке графиков и изображений в Android", "Введение и продвинутый курс по разработке Android", "Сборник советов по отладке и решению часто встречающихся проблем в Android", "Сборник советов по работе с多媒体 в Android (аудио, видео, запись и т.д.)", "Суммарные советы по использованию основных компонентов в Android", "Суммарные советы по использованию View в Android", "Суммарные советы по использованию layout в Android" и "Суммарные советы по использованию контроллеров в Android"

Надеюсь, что информация, изложенная в этой статье, поможет вам в разработке Android-приложений.

Заявление: содержимое статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета в добровольном порядке, сайт не имеет права собственности, не был отредактирован вручную и не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите контент,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения о нарушении,并提供 соответствующие доказательства. При подтверждении факта нарушения сайт незамедлительно удаляет涉嫌侵权的内容.

Основной учебник
Вам может понравиться