`
king_tt
  • 浏览: 2115471 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android之调用webservice 实现图片上传下载

 
阅读更多

最近boss要求做android客户端的图片上传和下载,就是调用服务器的webservice接口,实现从android上传图片到服务器,然后从服务器下载图片到android客户端。

需求下来了,开始动脑筋了呗。

通常,我们调用webservice,就是服务器和客户端(浏览器,android手机端等)之间的通信,其通信一般是传 xml或json格式的字符串。对,就只能是字符串。

我的思路是这样的,从android端用io流读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数传到服务器端,服务端解码

该字符串,最后保存到相应的路径下。整个上传过程的关键就是 以 字节流的字符串 进行数据传递。下载过程,与上传过程相反,把服务器端和客户端的代码相应的调

换。

不罗嗦那么多,上代码。流程是:把android的sdcard上某张图片 上传到 服务器下images 文件夹下。注:这只是个demo,没有UI界面,文件路径和文件名都已经写死,运行时,相应改一下就行。

1 。读取android sdcard上的图片。

  1. publicvoidtestUpload(){
  2. try{
  3. StringsrcUrl="/sdcard/";//路径
  4. StringfileName="aa.jpg";//文件名
  5. FileInputStreamfis=newFileInputStream(srcUrl+fileName);
  6. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  7. byte[]buffer=newbyte[1024];
  8. intcount=0;
  9. while((count=fis.read(buffer))>=0){
  10. baos.write(buffer,0,count);
  11. }
  12. StringuploadBuffer=newString(Base64.encode(baos.toByteArray()));//进行Base64编码
  13. StringmethodName="uploadImage";
  14. connectWebService(methodName,fileName,uploadBuffer);//调用webservice
  15. Log.i("connectWebService","start");
  16. fis.close();
  17. }catch(Exceptione){
  18. e.printStackTrace();
  19. }
  20. }


connectWebService()方法:

  1. <preclass="java"name="code">//使用ksoap2调用webservice
  2. privatebooleanconnectWebService(StringmethodName,StringfileName,StringimageBuffer){
  3. Stringnamespace="http://134.192.44.105:8080/SSH2/service/IService";//命名空间,即服务器端得接口,注:后缀没加.wsdl,
  4. //服务器端我是用x-fire实现webservice接口的
  5. Stringurl="http://134.192.44.105:8080/SSH2/service/IService";//对应的url
  6. //以下就是调用过程了,不明白的话请看相关webservice文档
  7. SoapObjectsoapObject=newSoapObject(namespace,methodName);
  8. soapObject.addProperty("filename",fileName);//参数1图片名
  9. soapObject.addProperty("image",imageBuffer);//参数2图片字符串
  10. SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(
  11. SoapEnvelope.VER10);
  12. envelope.dotNet=false;
  13. envelope.setOutputSoapObject(soapObject);
  14. HttpTransportSEhttpTranstation=newHttpTransportSE(url);
  15. try{
  16. httpTranstation.call(namespace,envelope);
  17. Objectresult=envelope.getResponse();
  18. Log.i("connectWebService",result.toString());
  19. }catch(Exceptione){
  20. e.printStackTrace();
  21. }
  22. returnfalse;
  23. }


2。 服务器端的webservice代码 :

  1. publicStringuploadImage(Stringfilename,Stringimage){
  2. FileOutputStreamfos=null;
  3. try{
  4. StringtoDir="C:\\ProgramFiles\\Tomcat6.0\\webapps\\SSH2\\images";//存储路径
  5. byte[]buffer=newBASE64Decoder().decodeBuffer(image);//对android传过来的图片字符串进行解码
  6. FiledestDir=newFile(toDir);
  7. if(!destDir.exists())destDir.mkdir();
  8. fos=newFileOutputStream(newFile(destDir,filename));//保存图片
  9. fos.write(buffer);
  10. fos.flush();
  11. fos.close();
  12. return"上传图片成功!"+"图片路径为:"+toDir;
  13. }catch(Exceptione){
  14. e.printStackTrace();
  15. }
  16. return"上传图片失败!";
  17. }



对android 端进行 单元测试调用testUpload()方法,如果你看到绿条的话,说明调用成功!在服务器下,就可以看到你上传的图片了。。。。

当然,这个demo很简陋,没有漂亮UI什么的,但是这是 android端调用webservice进行上传图片的过程。从服务器下载到android端,道理亦然。欢迎大家交流学习。。。。



最近boss要求做android客户端的图片上传和下载,就是调用服务器的webservice接口,实现从android上传图片到服务器,然后从服务器下载图片到android客户端。

需求下来了,开始动脑筋了呗。

通常,我们调用webservice,就是服务器和客户端(浏览器,android手机端等)之间的通信,其通信一般是传 xml或json格式的字符串。对,就只能是字符串。

我的思路是这样的,从android端用io流读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数传到服务器端,服务端解码

该字符串,最后保存到相应的路径下。整个上传过程的关键就是 以 字节流的字符串 进行数据传递。下载过程,与上传过程相反,把服务器端和客户端的代码相应的调

换。

不罗嗦那么多,上代码。流程是:把android的sdcard上某张图片 上传到 服务器下images 文件夹下。注:这只是个demo,没有UI界面,文件路径和文件名都已经写死,运行时,相应改一下就行。

1 。读取android sdcard上的图片。

  1. publicvoidtestUpload(){
  2. try{
  3. StringsrcUrl="/sdcard/";//路径
  4. StringfileName="aa.jpg";//文件名
  5. FileInputStreamfis=newFileInputStream(srcUrl+fileName);
  6. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  7. byte[]buffer=newbyte[1024];
  8. intcount=0;
  9. while((count=fis.read(buffer))>=0){
  10. baos.write(buffer,0,count);
  11. }
  12. StringuploadBuffer=newString(Base64.encode(baos.toByteArray()));//进行Base64编码
  13. StringmethodName="uploadImage";
  14. connectWebService(methodName,fileName,uploadBuffer);//调用webservice
  15. Log.i("connectWebService","start");
  16. fis.close();
  17. }catch(Exceptione){
  18. e.printStackTrace();
  19. }
  20. }


connectWebService()方法:

  1. <preclass="java"name="code">//使用ksoap2调用webservice
  2. privatebooleanconnectWebService(StringmethodName,StringfileName,StringimageBuffer){
  3. Stringnamespace="http://134.192.44.105:8080/SSH2/service/IService";//命名空间,即服务器端得接口,注:后缀没加.wsdl,
  4. //服务器端我是用x-fire实现webservice接口的
  5. Stringurl="http://134.192.44.105:8080/SSH2/service/IService";//对应的url
  6. //以下就是调用过程了,不明白的话请看相关webservice文档
  7. SoapObjectsoapObject=newSoapObject(namespace,methodName);
  8. soapObject.addProperty("filename",fileName);//参数1图片名
  9. soapObject.addProperty("image",imageBuffer);//参数2图片字符串
  10. SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(
  11. SoapEnvelope.VER10);
  12. envelope.dotNet=false;
  13. envelope.setOutputSoapObject(soapObject);
  14. HttpTransportSEhttpTranstation=newHttpTransportSE(url);
  15. try{
  16. httpTranstation.call(namespace,envelope);
  17. Objectresult=envelope.getResponse();
  18. Log.i("connectWebService",result.toString());
  19. }catch(Exceptione){
  20. e.printStackTrace();
  21. }
  22. returnfalse;
  23. }


2。 服务器端的webservice代码 :

  1. publicStringuploadImage(Stringfilename,Stringimage){
  2. FileOutputStreamfos=null;
  3. try{
  4. StringtoDir="C:\\ProgramFiles\\Tomcat6.0\\webapps\\SSH2\\images";//存储路径
  5. byte[]buffer=newBASE64Decoder().decodeBuffer(image);//对android传过来的图片字符串进行解码
  6. FiledestDir=newFile(toDir);
  7. if(!destDir.exists())destDir.mkdir();
  8. fos=newFileOutputStream(newFile(destDir,filename));//保存图片
  9. fos.write(buffer);
  10. fos.flush();
  11. fos.close();
  12. return"上传图片成功!"+"图片路径为:"+toDir;
  13. }catch(Exceptione){
  14. e.printStackTrace();
  15. }
  16. return"上传图片失败!";
  17. }



对android 端进行 单元测试调用testUpload()方法,如果你看到绿条的话,说明调用成功!在服务器下,就可以看到你上传的图片了。。。。

当然,这个demo很简陋,没有漂亮UI什么的,但是这是 android端调用webservice进行上传图片的过程。从服务器下载到android端,道理亦然。欢迎大家交流学习。。。。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics