您的位置:首页 > 数据库

android webservice 上传图片到 sqlserver数据库 (基于ksoap2 , C#)

2014-08-05 10:19 555 查看
最近的一个项目需要上传图片到数据库中,但是早了网上很多的文章都是上传到服务器本地,所以搞了很久,现在成功了写下来希望以后有用!

废话不多说了,开始吧。

环境: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();
}


这样就完成任务了,大家如果想知道每个函数的含义,可以在网上查到,我比较懒,就不多解释了哈


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: