android webservice 上传图片到 sqlserver数据库 (基于ksoap2 , C#)
2014-08-05 10:19
555 查看
最近的一个项目需要上传图片到数据库中,但是早了网上很多的文章都是上传到服务器本地,所以搞了很久,现在成功了写下来希望以后有用!
废话不多说了,开始吧。
环境:SQLSERVER 2008
WEBSERVICE使用C#写的
ANDROID 端的用的KSOAP2(这里就不说这么部署了,网上多的是)
数据库中图片字段用的是"image"类型,都是为了兼容原系统
。
先上WEBSERVICE的代码吧,其他的不用管就看buffer字段就行了。这里要说的是,因为WEBSERVEICE只支持ACiI所以必须把图片转成BASE64编码来传输,然后在服务器端在解码。就是这里我折腾好久的。
然后是android端的代码,这里只是测试,所以做的比较简单,容易理解,真要上线的话必须把上传函数写到线程中,这是大牛们说的。
这样就完成任务了,大家如果想知道每个函数的含义,可以在网上查到,我比较懒,就不多解释了哈
废话不多说了,开始吧。
环境:SQLSERVER 2008
WEBSERVICE使用C#写的
ANDROID 端的用的KSOAP2(这里就不说这么部署了,网上多的是)
数据库中图片字段用的是"image"类型,都是为了兼容原系统
。
先上WEBSERVICE的代码吧,其他的不用管就看buffer字段就行了。这里要说的是,因为WEBSERVEICE只支持ACiI所以必须把图片转成BASE64编码来传输,然后在服务器端在解码。就是这里我折腾好久的。
[WebMethod] public string AddDailyPic(String picId, String entityId, String tableName, String buffer, String size, String picName, String date) { byte[] ebuffer = Convert.FromBase64String(buffer); try { openConnection(); comm = new SqlCommand("INSERT INTO [b_card_pic]([PictureId],[BPicTypeCode],[EntityId],[TableName],[PicContent],[Resolution],[PicFileName],[PicName],[WriteDate],[WriteUserId],[ContentType],[PicSuffix]) values(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12)", conn); comm.Parameters.Add("@p1", SqlDbType.VarChar).Value = picId; comm.Parameters.Add("@p2", SqlDbType.VarChar).Value = "5"; comm.Parameters.Add("@p3", SqlDbType.VarChar).Value = entityId; comm.Parameters.Add("@p4", SqlDbType.VarChar).Value = tableName; comm.Parameters.Add("@p5", SqlDbType.Image).Value = ebuffer; comm.Parameters.Add("@p6", SqlDbType.VarChar).Value = size; comm.Parameters.Add("@p7", SqlDbType.VarChar).Value = picName; comm.Parameters.Add("@p8", SqlDbType.VarChar).Value = picName; comm.Parameters.Add("@p9", SqlDbType.VarChar).Value = date; comm.Parameters.Add("@p10", SqlDbType.VarChar).Value = "UserID"; comm.Parameters.Add("@p11", SqlDbType.VarChar).Value = "image/pjpeg"; comm.Parameters.Add("@p12", SqlDbType.VarChar).Value = "image/jpg"; comm.ExecuteNonQuery(); return "true"; } catch (Exception ex) { return ex.Message; } finally { closeConnection(); } }
然后是android端的代码,这里只是测试,所以做的比较简单,容易理解,真要上线的话必须把上传函数写到线程中,这是大牛们说的。
private String nameSpace = "http://gif.bms/"; //private String URL = "http://192.168.4.84:18/DMService.asmx" //内网使用 private String URL = "http://59.41.**.**:20025/BmsWebservice.asmx"; //外网使用 public String AddDailyPic(String func, String picId, String entityId, String tableName, String buffer, String size, String picName, String date) { String methodName = func; SoapObject rpc = new SoapObject(nameSpace, methodName); rpc.addProperty("picId", picId); rpc.addProperty("entityId", entityId); rpc.addProperty("tableName", tableName); rpc.addProperty("buffer", buffer); rpc.addProperty("size", size); rpc.addProperty("picName", picName); rpc.addProperty("date", date); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; envelope.dotNet = true; envelope.setOutputSoapObject(rpc); HttpTransportSE ht = new HttpTransportSE(URL); ht.debug = true; String SOAP_ACTION = nameSpace + methodName; try { ht.call(SOAP_ACTION, envelope); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } Object detail; String strRet; try { detail = (Object)envelope.getResponse(); strRet = detail.toString(); //return "ok"; } catch (SoapFault e) { // TODO Auto-generated catch block //return "error"; e.printStackTrace(); strRet = e.toString(); } return strRet; }
FileInputStream fis; try { fis = new FileInputStream(picList[i]); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[409600]; int count = 0; while((count = fis.read(buffer)) >= 0){ baos.write(buffer, 0, count); } String uploadBuffer = new String(Base64.encode(baos.toByteArray())); //进行Base64编码 WebService ws = new WebService(); String str = ws.AddDailyPic("AddDailyPic", "31", otherId, "b_insp_d_other", uploadBuffer, "3104*1746", picList[i].getName(), "2014-08-07"); Log.v("gif_test", "aaaa"+str); //BmsLogic.AddDailyPic("31", otherId, "b_insp_d_other", uploadBuffer, "3104*1746", picList[i].getName(), "2014-08-07"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
这样就完成任务了,大家如果想知道每个函数的含义,可以在网上查到,我比较懒,就不多解释了哈
相关文章推荐
- 基于ksoap2的android WebService上传图片
- Android使用ksoap2调用C#中的webservice实现图像上传
- 关于安卓调用C#的WebService上传图片问题(不使用ksoap2)
- 关于安卓调用C#的WebService上传图片问题(不使用ksoap2)
- Android使用ksoap2调用C#中的webservice实现图像上传
- android之调用webservice 实现图片上传
- Android之调用webservice 实现图片上传下载
- WebService 头部认证信息----基于ksoap2-android使用.Net Webservice
- Android KSOAP2调试(上传图片到服务器)
- android之调用webservice 实现图片上传
- 基于mars老师视频,android 腾讯微博微博 HttpClient 方法实现上传图片
- C# WebService 上传图片
- Android ksoap2调用.net webservice上传对象参数
- Android使用ksoap2调用C#中的webservice函数方法
- android之调用webservice 实现图片上传下载
- android之调用webservice 实现图片上传下载
- adnroid如何上传图片到webservice(c#编写的)
- android之调用webservice 实现图片上传
- C#开发之上传图片到WebService
- Android之调用webservice 实现图片上传下载(转)