English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
本文
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(メール送信時、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認がついたら、このサイトは即座に侵害を疑われるコンテンツを削除します。)