English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Пример
При реализации клиента веб-сервиса 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 (во время отправки письма замените # на @) для сообщения о нарушении,并提供 соответствующие доказательства. При подтверждении факта нарушения сайт незамедлительно удаляет涉嫌侵权的内容.