Bitmap转成byte[]再用base64转成string

用户上传头像,上传的头像图片需要上传至服务器的MySQL数据库保存,当用户上传成功之后每次登陆后从数据库获取头像信息显示。

由于之前一直使用JSON作为客户端和服务器端数据传输形式,JSON虽然使用方便但是不支持自定义类型,所以遇到的问题就是将二进制图片文件转成String,再传到服务器并保存到数据库。

在查阅了一些资料后想出了一个方法:

1,将图片转换成Byte[]

2,利用Base64将Byte[]加密编码转换成String

3,利用JSON将String传到服务器,由于图片一般转换后的String 是很大的,所以在mysql中保存为MEDIUMTEXT类型。方便以后从数据库直接读出来通过JSON再返回客户端解析后显示。

4,显示时将从数据库读出来的String通过Base64解码成Byte[];

5,用BitmapFactory将Byte[]转换成Bitmap显示。

A客户端向服务器端发送:

  1. private void edit_headPicture(Bitmap bitmap) {  
  2.         ByteArrayOutputStream baos = new ByteArrayOutputStream();//将Bitmap转成Byte[]  
  3.         bitmap.compress(Bitmap.CompressFormat.PNG, 50, baos);//压缩  
  4.         headPicture =Base64.encodeToString(baos.toByteArray(),Base64.DEFAULT);//加密转换成String  
  5.         int n=headPicture.length();  
  6.         Thread submit=new Thread(new SubmitThread());  
  7.         submit.start();  
  8.     }  
  9.       
  10.     class SubmitThread implements Runnable  
  11.     {  
  12.         Message msg = handler.obtainMessage();  
  13.         @Override  
  14.         public void run() {  
  15.             // TODO Auto-generated method stub  
  16.             JSONObject object=new JSONObject();  
  17.             try {  
  18.                 object.put("headPicture", headPicture);  
  19.                 msg.what=Server(object);  
  20.                 handler.sendMessage(msg);  
  21.             } catch (JSONException e) {  
  22.                 // TODO Auto-generated catch block  
  23.                 e.printStackTrace();  
  24.             }  
  25.         }  
  26.     }  
  27.     public int Server(JSONObject object)  
  28.     {  
  29.         String path=LoginActivity.URL+"SetInfoManager";  
  30.         try{  
  31.             URL url=new URL(path);  
  32.             String content = String.valueOf(object);  
  33.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  34.             conn.setConnectTimeout(5000);  
  35.             conn.setDoOutput(true);  
  36.             conn.setRequestMethod("POST");  
  37.             conn.setRequestProperty("User-Agent""Fiddler");  
  38.             conn.setRequestProperty("Content-Type""application/json");  
  39.             OutputStream os = conn.getOutputStream();  
  40.             os.write(content.getBytes());  
  41.             os.close();  
  42.             int code = conn.getResponseCode();  
  43.             if(code == 200)  
  44.             {  
  45.                 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
  46.                 String result="";  
  47.                 result = in.readLine();  
  48.                 in.close();  
  49.                 return Integer.parseInt(result);  
  50.             }  
  51.             else return 0;  
  52.         }catch (MalformedURLException e) {    
  53.             // TODO Auto-generated catch block    
  54.             e.printStackTrace();    
  55.         } catch (IOException e) {    
  56.             // TODO Auto-generated catch block    
  57.             e.printStackTrace();    
  58.        }   
  59.         return 0;  
  60.     }  
private void edit_headPicture(Bitmap bitmap) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();//将Bitmap转成Byte[]
		bitmap.compress(Bitmap.CompressFormat.PNG, 50, baos);//压缩
		headPicture =Base64.encodeToString(baos.toByteArray(),Base64.DEFAULT);//加密转换成String
		int n=headPicture.length();
		Thread submit=new Thread(new SubmitThread());
		submit.start();
	}
	
	class SubmitThread implements Runnable
    {
    	Message msg = handler.obtainMessage();
		@Override
		public void run() {
			// TODO Auto-generated method stub
			JSONObject object=new JSONObject();
			try {
				object.put("headPicture", headPicture);
				msg.what=Server(object);
				handler.sendMessage(msg);
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
    }
    public int Server(JSONObject object)
    {
    	String path=LoginActivity.URL+"SetInfoManager";
    	try{
    		URL url=new URL(path);
    		String content = String.valueOf(object);
        	HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        	conn.setConnectTimeout(5000);
        	conn.setDoOutput(true);
        	conn.setRequestMethod("POST");
        	conn.setRequestProperty("User-Agent", "Fiddler");
        	conn.setRequestProperty("Content-Type", "application/json");
        	OutputStream os = conn.getOutputStream();
        	os.write(content.getBytes());
        	os.close();
        	int code = conn.getResponseCode();
        	if(code == 200)
        	{
        		BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        		String result="";
        		result = in.readLine();
        		in.close();
        		return Integer.parseInt(result);
        	}
        	else return 0;
    	}catch (MalformedURLException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
       } 
    	return 0;
    }

B:服务器接收代码:

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  2.         StringBuffer buffer=new StringBuffer();  
  3.         String line="";  
  4.         request.setCharacterEncoding("UTF-8");  
  5.         BufferedReader reader=request.getReader();  
  6.         while((line=reader.readLine())!=null)  
  7.         {  
  8.             buffer.append(line);  
  9.         }  
  10.         try {  
  11.             JSONObject object=new JSONObject(buffer.toString());  
  12.             int result=new SetInfoManagerDB(object).Update();  
  13.             response.getOutputStream().write((result+"").getBytes());  
  14.         } catch (JSONException e) {  
  15.             // TODO Auto-generated catch block  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19.   
  20.   
  21. <span style="white-space:pre">        </span> sql="update companyview set headPicture=? where e_Name=?";  
  22.             try {  
  23.                 try {  
  24.                     stmt=conn.prepareStatement(sql);  
  25.                     stmt.setString(1, object.getString("headPicture"));  
  26.                     stmt.setString(2, username);  
  27.                     stmt.executeUpdate();  
  28.                     stmt.close();  
  29.                     return 4;  
  30.                 } catch (SQLException e) {  
  31.                     // TODO Auto-generated catch block  
  32.                     e.printStackTrace();  
  33.                     return 6;  
  34.                 }  
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		StringBuffer buffer=new StringBuffer();
		String line="";
		request.setCharacterEncoding("UTF-8");
		BufferedReader reader=request.getReader();
		while((line=reader.readLine())!=null)
		{
			buffer.append(line);
		}
		try {
			JSONObject object=new JSONObject(buffer.toString());
			int result=new SetInfoManagerDB(object).Update();
			response.getOutputStream().write((result+"").getBytes());
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


<span style="white-space:pre">		</span> sql="update companyview set headPicture=? where e_Name=?";
			try {
				try {
					stmt=conn.prepareStatement(sql);
					stmt.setString(1, object.getString("headPicture"));
					stmt.setString(2, username);
					stmt.executeUpdate();
					stmt.close();
					return 4;
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					return 6;
				}

C:客户端解析并显示:

  1. String s=view.getString("headPicture");  
  2.                     if(s.equals(""))  
  3.                         btn_user.setImageResource(R.drawable.ic_launcher);  
  4.                     else  
  5.                     {  
  6.                         byte[] bytes = Base64.decode(view.getString("headPicture"), Base64.DEFAULT);  
  7.                         btn_user.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));  
  8.                     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值