Android編程實(shí)現(xiàn)圖片的上傳和下載功能示例
本文實(shí)例講述了Android編程實(shí)現(xiàn)圖片的上傳和下載功能。分享給大家供大家參考,具體如下:
在實(shí)現(xiàn)一個(gè)Android的WEB服務(wù)客戶端,比如微博,論壇客戶端時(shí),經(jīng)常會(huì)使用到圖片的上傳和下載。在這里介紹如何利用HttpClient實(shí)現(xiàn)圖片的上傳和下載功能。
1 圖片上傳:上傳圖片時(shí),首先獲得圖片的路徑,創(chuàng)建文件,并將圖片轉(zhuǎn)化為字節(jié)流寫入到request,并發(fā)送該請(qǐng)求。
客戶端代碼:
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); //如果返回狀態(tài)為200,獲得返回的結(jié)果 if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){ ……//圖片上傳成功 } } catch(Exception e){ }
服務(wù)器端所做的工作則是接收該字節(jié)流,寫入文件中,并在服務(wù)器中相應(yīng)文件夾中保存該文件,并記錄該文件的路徑,將圖片文件路徑寫入到數(shù)據(jù)庫中保存。
服務(wù)器端代碼:
//獲得新聞id String gid = request.getParameter("gid"); String filePath = getRealPath(request) + "\\userpic\\"; // 定義上載文件的最大字節(jié) int MAX_SIZE = 102400 * 102400; // 聲明文件讀入類 DataInputStream in = null; FileOutputStream fileOut = null; // 取得客戶端上傳的數(shù)據(jù)類型 String contentType = request.getContentType(); if(contentType.indexOf("binary/octet-stream") >= 0){ // 讀入上傳的數(shù)據(jù) in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength(); // 如果圖片過大 if(formDataLength > MAX_SIZE){ String errormsg=("上傳的文件字節(jié)數(shù)不可以超過" + MAX_SIZE); out.println(errormsg); return ; } // 保存上傳文件的數(shù)據(jù) byte dataBytes[] = new byte[formDataLength]; int byteRead = 0; int totalBytesRead = 0; // 上傳的數(shù)據(jù)保存在byte數(shù)組 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(); } // 創(chuàng)建文件的寫出類 fileOut = new FileOutputStream(fileName); // 保存文件的數(shù)據(jù) fileOut.write(dataBytes); fileOut.close(); //保存文件的路徑名 ……
2 圖片下載:首先獲得網(wǎng)絡(luò)圖片的圖片地址,發(fā)送請(qǐng)求后,服務(wù)器將會(huì)返回該圖片的字節(jié)流,利用BitmapFactory.decodeStream()方法將字節(jié)流轉(zhuǎn)化為圖片并返回。具體代碼如下:
//獲得網(wǎng)絡(luò)中的圖片 public Bitmap getGossipImage(String gid){ String httpUrl = httpDomain+"userpic/"+gid+".png"; Bitmap bitmap = null; HttpGet httpRequest = new HttpGet(httpUrl); //取得HttpClient 對(duì)象 HttpClient httpclient = new DefaultHttpClient(); try { //請(qǐng)求httpClient ,取得HttpRestponse HttpResponse httpResponse = httpclient.execute(httpRequest); if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ //取得相關(guān)信息 取得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; }
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android布局技巧之創(chuàng)建可重用的UI組件
這篇文章主要為大家詳細(xì)介紹了Android布局技巧之創(chuàng)建可重用的UI組件,文中提到了include標(biāo)簽的使用方法,感興趣的小伙伴們可以參考一下2016-05-05Android開發(fā)之基于DialogFragment創(chuàng)建對(duì)話框的方法示例
這篇文章主要介紹了Android開發(fā)之基于DialogFragment創(chuàng)建對(duì)話框的方法,結(jié)合實(shí)例形式分析了DialogFragment創(chuàng)建對(duì)話框的具體功能與布局相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-08-08Android集成騰訊X5實(shí)現(xiàn)文檔瀏覽功能
Android內(nèi)部沒有控件來直接顯示文檔,跳轉(zhuǎn)WPS或其他第三方文檔App體驗(yàn)性不好,使用騰訊X5內(nèi)核能很好的解決的這一問題這篇文章主要介紹了Android集成騰訊X5實(shí)現(xiàn)文檔瀏覽功能,需要的朋友可以參考下2019-10-10Android RecyclerView滾動(dòng)定位
這篇文章主要為大家詳細(xì)介紹了Android RecyclerView滾動(dòng)定位的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Android利用CountDownTimer實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)效果實(shí)例
這篇文章主要給大家介紹了關(guān)于Android如何利用CountDownTimer實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10使用Flutter實(shí)現(xiàn)一個(gè)走馬燈布局的示例代碼
這篇文章主要介紹了使用 Flutter 實(shí)現(xiàn)一個(gè)走馬燈布局的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Android 通過Intent使用Bundle傳遞對(duì)象詳細(xì)介紹
這篇文章主要介紹了Android 通過Intent使用Bundle傳遞對(duì)象詳細(xì)介紹的相關(guān)資料,并附實(shí)例代碼講解,具有一定的參考價(jià)值,需要的朋友可以參考下2016-11-11Android編程實(shí)現(xiàn)GridView控件點(diǎn)擊圖片變暗效果的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)GridView控件點(diǎn)擊圖片變暗效果的方法,簡單分析了GridView控件事件響應(yīng)及屬性操作的相關(guān)技巧,需要的朋友可以參考下2017-06-06