在下载Base64.java文件 http://iharder.sourceforge.net/current/java/base64/,分别添加到客户端和服务器端.
1>我们知道在web中实现文件上传可以通过apache的项目,那么在android中把文件上传到服务器端,当然也可以通过该方式,但是也可以通过base64,
这样就相当于把一个字符串传到服务器,然后在服务器端通过Base64.decode()方法解码接口,返回的字节数组byte[]
这样就相当于把一个字符串传到服务器,然后在服务器端通过Base64.decode()方法解码接口,返回的字节数组byte[]
在android side:
- <span style="font-size:18px;">public class MainActivity extends Activity {
- InputStream is = null;
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.main);
- Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),
- R.drawable.a1);
- ByteArrayOutputStream bao = new ByteArrayOutputStream();
- bitmapOrg.compress(Bitmap.CompressFormat.PNG, 90, bao);
- byte[] ba = bao.toByteArray();
- String ba1 = Base64.encodeBytes(ba);
- ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
- nameValuePairs.add(new BasicNameValuePair("image", ba1));
- try {
- HttpClient httpclient = new DefaultHttpClient();
- HttpPost httppost = new
- HttpPost(
- "http://192.168.0.101:8080/ServletClassloadTest/servlet/UploadImage");
- httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
- HttpResponse response = httpclient.execute(httppost);
- HttpEntity entity = response.getEntity();
- is = entity.getContent();
- } catch (Exception e) {
- Log.e("log_tag", "Error in http connection " + e.toString());
- }
- }
- }</span>
在server side:
- <span style="font-size:18px;"> String result = request.getParameter("image")
- byte[] result = Base64.decode()
- OutputStream out = new FileOutputStream("C:\\a.png");
- out.write(result);
- out.close();</span>
测试结果:在C盘找到如下文件
2>同理我们也可以在客户端把对象传递到服务器端.(这是把多个对象传递给服务器端,传递单个对象更加简单)
在android side:
- <span style="font-size:18px;">public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.main);
- Collect conCollect = new Collect(new Person[]{new Person("yzq",12),new Person("johnny",21)});
- String ba1 = null;
- try {
- ba1 = Base64.encodeObject(conCollect);
- } catch (IOException e) {
- e.printStackTrace();
- ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
- nameValuePairs.add(new BasicNameValuePair("image", ba1));
- try {
- HttpClient httpclient = new DefaultHttpClient();
- HttpPost httppost = new
- HttpPost(
- "http://192.168.0.101:8080/ServletClassloadTest/servlet/UploadImage");
- httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
- HttpResponse response = httpclient.execute(httppost);
- HttpEntity entity = response.getEntity();
- is = entity.getContent();
- } catch (Exception e) {
- Log.e("log_tag", "Error in http connection " + e.toString());
- }
- }
- </span>
- <span style="font-size:18px;">Person类
- public class Person implements Serializable{
- private String name;
- private int age;
- public Person(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
- Collect 类
- public class Collect implements Serializable{
- public Person[] ps;
- public Collect(Person[] ps) {
- super();
- this.ps = ps;
- }
- }
- 在server side:
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html");
- String image = request.getParameter("image");
- System.out.println("result"+image);
- try {
- Collect collect = (Collect)com.ieheima.servlet.Base64.decodeToObject(image);
- Person[] ps = collect.ps;
- System.out.println("长度:"+ps.length);
- for (int i = 0; i < ps.length; i++) {
- System.out.println(ps[i].getName());
- }
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- 在控制台输出结果:
- </span>
需要注意的是在服务器端也要有相同的类Collect和Person,同时包名也要一样.如果传输的对象过大,可能会导致内存溢出.
还需要给实现了Serializable接口的类,定一个一个serialVersionUID
希望以上Base64的讲解能够对读者有帮助,如果有什么错误尽情读者批评之处,不胜感谢..