Отправка изображения с Android в веб-службу ASP.NET - PullRequest
5 голосов
/ 23 февраля 2012

Я разрабатываю приложение для Android, которое должно отправить изображение в мою веб-службу ASP.NET, где изображение будет сохранено в виде файла.Я видел несколько способов сделать это, и я пошел на это: преобразовать изображение в байтовый массив -> преобразовать байтовый массив в строку -> отправить строку в веб-сервис, используя KSOAP2 -> получить строкув веб-службе -> преобразовать его в байтовый массив -> сохранить в виде изображения:

IVtest = (ImageView)findViewById(R.id.carticon);
BitmapDrawable drawable = (BitmapDrawable) IVtest.getDrawable();
    Bitmap bitmap = drawable.getBitmap();

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
    byte[] data = baos.toByteArray();
    ImageView image=new ImageView(this);
    image.setImageBitmap(bmp);
    String strBase64 = Base64.encode(data);

Затем я отправляю strBase64 в веб-службу.В веб-службе у меня есть это:

public Image ConvertToImage(byte[] image)
{
    MemoryStream ms = new MemoryStream(image);
    Image returnImage = Image.FromStream(ms);
    return returnImage;
}

[WebMethod]
public String UploadImage(String image, String name)
{
    byte[] image_byte = Encoding.Unicode.GetBytes(image);
    Image convertedImage = ConvertToImage(image_byte);
    try {
        convertedImage.Save(Server.MapPath("generated_image.jpg"),     System.Drawing.Imaging.ImageFormat.Jpeg);
    } catch (Exception e) {
        return e.Message;
    }
    return "Success";
}

Я получаю сообщение об ошибке на этой строке : Image returnImage = Image.FromStream(ms);

Это ошибка, которую я получаю:

SoapFault - faultcode: 'soap:Server' faultstring: 'System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.ArgumentException: Parameter is not valid.
   at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
   at System.Drawing.Image.FromStream(Stream stream)
   at Service.ConvertToImage(Byte[] image) in e:\FTP\nvm\Service.asmx:line 1366
   at Service.UploadImage(String image, String name) in e:\FTP\nvm\Service.asmx:line 1374
   --- End of inner exception stack trace ---' faultactor: 'null' detail: org.kxml2.kdom.Node@437bf7b0

Спасибо

1 Ответ

5 голосов
/ 23 февраля 2012

Похоже, что с преобразованием строки в изображение что-то не так.Кроме того, вы не утилизируете свой поток, который будет пропускать память.

Попробуйте вместо этого:

private Image Base64ToImage(string base64String)
    {
        // Convert Base64 String to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        using (var ms = new MemoryStream(imageBytes, 0,
                                         imageBytes.Length))
        {
            // Convert byte[] to Image
            ms.Write(imageBytes, 0, imageBytes.Length);
            Image image = Image.FromStream(ms, true);
            return image;
        }
    }
...