編輯:關於Android編程
本文實例講述了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 圖片下載:首先獲得網絡圖片的圖片地址,發送請求後,服務器將會返回該圖片的字節流,利用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程序設計有所幫助。
一般情況下,如果想要在ListView上面實現Listitem的滑動刪除效果,或者仿QQ的滑動顯示刪除效果的時候,只需要繼承ListView,自定義一個ListView就
可移動頁面MoveActivity滑出式菜單從界面上看,像極了一個水平滾動視圖HorizontalScrollView,當然也可以使用HorizontalScrollVi
1、startService 在Android系統匿名共享內存(Anonymous Shared Memory)Java調用接口分析,http://blog
先來張效果圖(可以滑動切換頁卡) 主頁面布局文件 remind_auction_new_list.xml : 主頁面代碼: public c