最近boss要求做android客户端的图片上传和下载,就是调用服务器的webservice接口,实现从android上传图片到服务器,然后从服务器下载图片到android客户端。 需求下来了,开始动脑筋了呗。 通常,我们调用webservice,就是服务器和客户端(浏览器,android手机端等)之间的通信,其通信一般是传 xml或json格式的字符串。对,就只能是字符串。 我的思路是这样的,从android端用io流读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数传到服务器端,服务端解码该字符串,最后保存到相应的路径下。整个上传过程的关键就是 以 字节流的字符串 进行数据传递。下载过程,与上传过程相反,把服务器端和客户端的代码相应的调换。 不罗嗦那么多,上代码。流程是:把android的sdcard上某张图片 上传到 服务器下images 文件夹下。 注:这只是个demo,没有UI界面,文件路径和文件名都已经写死,运行时,相应改一下就行。 1 。读取android sdcard上的图片。 public void testUpload(){ try{ String srcUrl = "/sdcard/"; //路径 String fileName = "aa.jpg"; //文件名 FileInputStream fis = new FileInputStream(srcUrl + fileName); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int count = 0; while((count = fis.read(buffer)) >= 0){ baos.write(buffer, 0, count); } String uploadBuffer = new String(Base64.encode(baos.toByteArray())); //进行Base64编码 String methodName = "uploadImage"; connectWebService(methodName,fileName, uploadBuffer); //调用webservice Log.i("connectWebService", "start"); fis.close(); }catch(Exception e){ e.printStackTrace(); } } connectWebService()方法: //使用 ksoap2 调用webservice private boolean connectWebService(String methodName,String fileName, String imageBuffer) { String namespace = "http://134.192.44.105:8080/SSH2/service/IService"; // 命名空间,即服务器端得接口,注:后缀没加 .wsdl, //服务器端我是用x-fire实现webservice接口的 String url = "http://134.192.44.105:8080/SSH2/service/IService"; //对应的url //以下就是 调用过程了,不明白的话 请看相关webservice文档 SoapObject soapObject = new SoapObject(namespace, methodName); soapObject.addProperty("filename", fileName); //参数1 图片名 soapObject.addProperty("image", imageBuffer); //参数2 图片字符串 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER10); envelope.dotNet = false; envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTranstation = new HttpTransportSE(url); try { httpTranstation.call(namespace, envelope); Object result = envelope.getResponse(); Log.i("connectWebService", result.toString()); } catch (Exception e) { e.printStackTrace(); } return false; } 2。 服务器端的webservice代码 : public String uploadImage(String filename, String image) { FileOutputStream fos = null; try{ String toDir = "C:\\Program Files\\Tomcat 6.0\\webapps\\SSH2\\images"; //存储路径 byte[] buffer = new BASE64Decoder().decodeBuffer(image); //对android传过来的图片字符串进行解码 File destDir = new File(toDir); if(!destDir.exists()) destDir.mkdir(); fos = new FileOutputStream(new File(destDir,filename)); //保存图片 fos.write(buffer); fos.flush(); fos.close(); return "上传图片成功!" + "图片路径为:" + toDir; }catch (Exception e){ e.printStackTrace(); } return "上传图片失败!"; } 对android 端进行 单元测试调用testUpload()方法,如果你看到绿条的话,说明调用成功!在服务器下,就可以看到你上传的图片了。。。。 当然,这个demo很简陋,没有漂亮UI什么的,但是这是 android端调用webservice进行上传图片的过程。从服务器下载到android端,道理亦然。欢迎大家交流学习。。。。

更多相关文章

  1. Android(安卓)利用Matrix实现图片随手指平移、旋转、缩放
  2. Android原生json类org.json.JSONObject初步使用
  3. 《Android移动应用基础教程》(Android(安卓)Studio)(第二版)黑马教程
  4. Android中的Selector
  5. Android(安卓)Activity 简介
  6. 2011Android技术面试整理附有详细答案(包括百度、新浪、中科软等
  7. 两种特殊TabHost实现
  8. Android设备扫描机制详解
  9. Android(安卓)Webview 基本使用总结

随机推荐

  1. android布局属性详解
  2. widget(4、spinner)
  3. Android免费课程分享
  4. (转)为什么Android不是GPL许可证?
  5. android button多状态, selector
  6. Android(安卓)Overview
  7. Android(安卓)SDK Manager无法自动更新
  8. Android(安卓)Studio Toast/Notification
  9. Android(安卓)控件属性
  10. Android(安卓)删除手机联系人,添加手机联