关于安卓调用C#的WebService上传图片有关问题(不使用ksoap2)
关于安卓调用C#的WebService上传图片问题(不使用ksoap2)
小弟初学安卓开发。最近需要做一个图片上传的功能。
我是用java开发安卓,调用C#的WebService。在网上找到一大堆资料,几乎全部是用ksoap2包的。
请注意,我想做的是不用ksoap包的。
我现在的方法是从android端用读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数传到服务器端,服务端解码该字符串,最后保存到相应的路径下。整个上传过程的关键就是以字节流的字符串进行数据传递。
功能代码如下:
WebService:
安卓端:调用WebService方法
小弟初学安卓开发。最近需要做一个图片上传的功能。
我是用java开发安卓,调用C#的WebService。在网上找到一大堆资料,几乎全部是用ksoap2包的。
请注意,我想做的是不用ksoap包的。
我现在的方法是从android端用读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数传到服务器端,服务端解码该字符串,最后保存到相应的路径下。整个上传过程的关键就是以字节流的字符串进行数据传递。
功能代码如下:
WebService:
public string uploadImage(string filename, string image)
{
FileStream fs = null;
try
{
string toDir = "E:\\C# Project\\Dev\\GPRSDataIn\\GPRSDataIn\\Images";
fs = new FileStream(filename, FileMode.Create);
byte[] buffer = Encoding.UTF8.GetBytes(image);
fs.Write(buffer, 0, buffer.Length);
fs.Flush();
fs.Close();
return "上传图片成功!" + "图片路径为:" + toDir;
}
catch (Exception e)
{
}
return "上传图片失败!";
}
安卓端:调用WebService方法
public class UploadUtil {
private static HttpConnSoap Soap = new HttpConnSoap();
public static void uploadImage(String filename, String image) {
ArrayList<String>arrayList=new ArrayList<String>();
ArrayList<String>brrayList=new ArrayList<String>();
arrayList.clear();
brrayList.clear();
arrayList.add("filename");
arrayList.add("image");
brrayList.add(filename);
brrayList.add(image);
Soap.GetWebServre("uploadImage", arrayList, brrayList);
}
}
public class HttpConnSoap {
/**
* 获取返回的InputStream,为了增强通用性,在方法内不对其进行解析。
*
* @param methodName
* webservice方法名
* @param Parameters
* webservice方法对应的参数名
* @param ParValues
* webservice方法中参数对应的值
* @return 未解析的InputStream
*/
public InputStream GetWebServre(String methodName, ArrayList<String> Parameters, ArrayList<String> ParValues) {
// 指定URL地址,我这里使用的是常量。
String ServerUrl = "http://www.bsri.com.cn:99/ws3/Service1.asmx";
// soapAction = 命名空间 + 方法名
String soapAction = "http://tempuri.org/" + methodName;
// 拼凑requestData
String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+ "<soap:Body />";
String tps,vps,ts;
String mreakString = "";
mreakString = "<" + methodName + " xmlns=\"http://tempuri.org/\">";
for (int i = 0; i < Parameters.size(); i++)
{
tps = Parameters.get (i).toString();
//设置该方法的参数为.net webService中的参数名称
vps = ParValues.get (i).toString();
ts = new String("<" + tps + ">" + vps + "</" + tps + ">");
mreakString = mreakString + ts;
}
mreakString = mreakString + "</" + methodName + ">";
String soap2 = "</soap:Envelope>";
String requestData = soap + mreakString + soap2;
// 其上所有的数据都是在拼凑requestData,即向服务器发送的数据