Отправка изображения в строке Base64 и получение в веб-сервисе через kSoap

я отправляю изображение в byte[] и 3 строки в веб-службу с помощью ksoap, но у меня это не работает, я не уверен, где я ошибаюсь, при отправке изображения с Android и на приемном конце я помещаю код здесь, пожалуйста, проверьте это Вот как я конвертирую изображение в byte[] на стороне клиента (Android)

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

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]
    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;

}

когда я отправляю данные в веб-сервис, Android LogCat показывает мне

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

я так думаю, что означает, что данные, которые я отправляю в веб-службу, имеют неправильный тип, поэтому я попытался сделать String Picture до byte[] Picture в веб-методе, но результат был таким же. Я не могу понять, где я ошибаюсь...

Обновление: теперь отправка изображения в строке Base64 и исключение Java исчезли, но веб-метод по-прежнему не преобразует эту строку Base64 в изображение...


person Addy    schedule 28.03.2014    source источник
comment
500 означает, что сервер не подключается, вам нужно сначала попробовать без передачи изображения, если оно работает, затем передать изображение и передать изображение, если вы отправляете изображение в формате base64, тогда это лучше, чем байт []   -  person PankajAndroid    schedule 28.03.2014
comment
позвольте мне попробовать это без изображения....   -  person Addy    schedule 28.03.2014
comment
@PankajAndroid: я удалил эту строку new MarshalBase64().register(envelope); и добавлен String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT); чтобы преобразовать byte[] в строку base64, теперь исключение исчезло, и веб-метод получает данные правильно, но не преобразует строку обратно в изображение. См. соответствующее обновление.   -  person Addy    schedule 28.03.2014


Ответы (1)


Вот как я это сделал. Параметр, передаваемый функции, представляет собой строку 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";
    }

Это отлично работает для меня, надеюсь, это поможет.

person Omar Sherif Mansour    schedule 05.07.2015
comment
Я решил эту проблему год назад :-P, но спасибо за вклад, это может помочь многим другим ... - person Addy; 06.07.2015
comment
Ха-ха-ха, я тоже думал, что я слишком поздно xD попал в это совсем недавно. Кстати, есть идеи о том, как на самом деле отправить изображение из веб-сервиса .Net в виде C # Image не байтового массива на Android и наоборот??! - person Omar Sherif Mansour; 06.07.2015