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

Androidプログラミングで画像のアップロードとダウンロード機能を実現する例

本文

AndroidのWEBサービスクライアント、例えば微博、フォーラムクライアントを実装する際には、画像のアップロードとダウンロードがよく使用されます。ここでは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){
}

サーバーサイドが行う作業は、そのバイトストリームを受け取り、ファイルに書き込み、サーバーの対応するフォルダーにファイルを保存し、ファイルのパスを記録し、画像ファイルのパスをデータベースに保存することです。

サーバーサイドコード:

//ニュースIDを取得します
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;
//   アップロードされたデータはbyte配列に保存されます
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 画像のダウンロード:まずネットワーク上の画像のURLを取得し、リクエストを送信すると、サーバーはその画像のバイトストリームを返します。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基本コンポーネントの使い方のまとめ》、《AndroidビューViewの技術のまとめ》、《Androidレイアウトlayoutの技術のまとめ》および《Androidコントロールの使い方のまとめ》

この記事に記載されている内容が皆様のAndroidプログラムデザインに役立つことを願っています。

声明:この記事の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしたものであり、このサイトは所有権を持ちません。また、人工編集は行われておらず、関連する法的責任を負いません。著作権侵害を疑う内容がある場合は、以下のメールアドレスまでご連絡ください:notice#oldtoolbag.com(メール送信時、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認がついたら、このサイトは即座に侵害を疑われるコンテンツを削除します。)

おすすめ