閱讀575 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android中圖片的上傳和下載

作者:餘蒙


      在實現一個Android的WEB服務客戶端,比如微博,論壇客戶端時,經常會使用到圖片的上傳和下載。在這裏介紹如何利用HttpClient實現圖片的上傳和下載功能。

1 圖片上傳:上傳圖片時,首先獲得圖片的路徑,創建文件,並將圖片轉化為字節流寫入到request,並發送該請求。

客戶端代碼:        

File file = new File(imageUrl);	
		String httpUrl = httpDomain+"AddImageServlet"+"?gbinary/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;
	}


最後更新:2017-04-04 07:03:48

  上一篇:go ViewStub的實戰開發
  下一篇:go cf 167.div2 D.Dima and Two Sequences