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

Exemplo de upload e download de imagens implementados em programação Android

Exemplo prático

Ao implementar um cliente de serviço web Android, como um cliente do Weibo ou um cliente de fórum, frequentemente se utiliza o upload e o download de imagens. Aqui apresentamos como usar o HttpClient para implementar as funcionalidades de upload e download de imagens.

1 Upload de imagemAo enviar uma imagem, primeiramente obter o caminho da imagem, criar um arquivo, converter a imagem em fluxo de bytes e escrevê-lo no request, e enviar essa solicitação.

Código do cliente:

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);
//Se o estado de retorno for200, obter o resultado de retorno
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
……//Upload de imagem bem-sucedido
}
}
catch(Exception e){
}

O trabalho feito pelo servidor é receber o fluxo de bytes, escrevê-lo no arquivo, armazená-lo na pasta correspondente do servidor e registrar o caminho do arquivo, escrevendo o caminho do arquivo de imagem no banco de dados para salvá-lo.

Código do servidor:

//Obter o ID da notícia
String gid = request.getParameter("gid");
String filePath = getRealPath(request) + "\\userpic\\";
//   Definir o tamanho máximo de bytes do arquivo carregado
int MAX_SIZE = 102400 * 102400;
//   Declarar a classe de leitura do arquivo
DataInputStream in = null;
FileOutputStream fileOut = null;
//   Obter o tipo de dados carregados pelo cliente
String contentType = request.getContentType();
if(contentType.indexOf("binary"/octet-(stream") >= 0){
  //   Ler os dados carregados
  in = new DataInputStream(request.getInputStream());
  int formDataLength = request.getContentLength();
  // Se a imagem for grande
  if(formDataLength > MAX_SIZE){
    String errormsg=("O número de bytes do arquivo carregado não pode exceder " + MAX_SIZE);
    out.println(errormsg);
    return ;
  }
//   Salvar os dados do arquivo carregado
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
//   Os dados carregados são armazenados em um array de bytes
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, "Falha na conexão!", Toast.LENGTH_SHORT).show();
      }
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return bitmap;
}

Leitores interessados em mais conteúdo sobre Android podem consultar as seções especiais deste site: 'Resumo de Técnicas de Processamento de Gráficos e Imagens no Android', 'Tutorial de Início e Avançado de Desenvolvimento Android', 'Resumo de Técnicas de Depuração e Solução de Problemas Comuns no Android', 'Resumo de Técnicas de Manipulação de Multimídia (Áudio, Vídeo, Gravação, etc.) no Android', 'Resumo de Uso de Componentes Básicos no Android', 'Resumo de Técnicas de View no Android', 'Resumo de Técnicas de Layout no Android' e 'Resumo de Uso de Controles no Android'.

Espero que o conteúdo deste artigo ajude a todos a melhorar o design de programas Android.

Declaração: O conteúdo deste artigo é de origem na internet, pertence ao respectivo proprietário, foi contribuído e carregado voluntariamente pelos usuários da internet. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por eventuais responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas. Se confirmado, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar