在Base64字符串中发送图像并通过kSoap在webservice中接收

时间:2014-03-28 05:01:51

标签: c# android web-services ksoap

我发送一个byte []和3个字符串的图像到webservice使用kso​​ap但它不适合我,我不知道我错在哪里,从Android发送图像和接收端,我正在放置代码在这里请检查一下 以下是我在客户端(Android)端将图像转换为byte []的方法

Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream .toByteArray();
String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);

以下是我通过Ksoap将其发送到webservice的代码

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Name", name);
request.addProperty("Email", email);
request.addProperty("Picture", encoded );
request.addProperty("Date", date);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport. call(SOAP_ACTION, envelope);

SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
String str = result.toString();

这是我接收这个肥皂信封的webMethod

  [WebMethod]
    public String PutFile(String Name, String Email, String Picture, String Date)
        {

String PictureByteString = Picture;
Image imgFromString = SaveByteArrayAsImage(PictureByteString);
DateTime.Now.ToShortDateString() + ".jpg"));
string serverpath = Server.MapPath("~/" + Email + "-" + DateTime.Now.ToShortDateString());
imgFromString.Save(serverpath, System.Drawing.Imaging.ImageFormat.Jpeg);
String Path = serverpath + ".Jpeg";


            return Name;
        }

private Image SaveByteArrayAsImage(string base64String)
{
byte[] bytes = Convert.FromBase64String(base64String);

image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms);
}

return image;

}

当我向webservice发送数据时,Android LogCat向我显示

java.io.IOException: HTTP request failed, HTTP status: 500

我认为这意味着我发送给webservice的数据类型不正确,所以我尝试在webmethod中将String Picture设为byte[] Picture,但结果相同。我无法弄清楚我错在哪里......

更新 现在在Base64字符串中发送图像并且java异常消失了,但webmethod仍未将该Base64字符串转换为图像......

1 个答案:

答案 0 :(得分:0)

这就是我做到的。
传递给函数的参数是Base64字符串

public string SendImage(string data)
    {
        byte[] myarray = Convert.FromBase64String(data);
        MemoryStream memStream = new MemoryStream(myarray);
        Image myimage = Image.FromStream(memStream);
        myimage.Save("G:\\image.png", ImageFormat.Png);
        return "succeeded";
    }

这对我来说非常有用,希望有所帮助。