【问题标题】:Send an image from Android to an ASP.NET Web Service将图像从 Android 发送到 ASP.NET Web 服务
【发布时间】:2012-02-22 22:22:12
【问题描述】:

我正在开发一个 Android 应用程序,该应用程序应将图像发送到我的 ASP.NET Web 服务,图像将在其中保存为文件。我已经看到了几种方法来做到这一点,我选择了这个:将图像转换为字节数组 -> 将字节数组转换为字符串 -> 使用 KSOAP2 将字符串发送到 Web 服务 -> 接收字符串在 Web 服务 -> 将其转换为字节数组 -> 另存为图片:

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 发送到 Web 服务。 在网络服务中我有这个:

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

谢谢

【问题讨论】:

    标签: android asp.net web-services image ksoap2


    【解决方案1】:

    您从字符串到图像的转换似乎有些问题。此外,您不会处理会泄漏内存的流。

    试试这个:

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

    【讨论】:

    • 非常感谢,完成了这项工作。图像终于在服务器上:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多