从Android向ASP.NET Web服务发送图像
我正在开发一个Android应用程序,它应该将一个图像发送到我的ASP.NET Web服务,在那里图像将保存为文件。我已经看到了几种方法来实现这一点,我选择了这种方法:将图像转换为字节数组->将字节数组转换为字符串->使用KSOAP2将字符串发送到web服务->在web服务接收字符串->将其转换为字节数组-> 将其另存为图像:从Android向ASP.NET Web服务发送图像,android,asp.net,web-services,image,ksoap2,Android,Asp.net,Web Services,Image,Ksoap2,我正在开发一个Android应用程序,它应该将一个图像发送到我的ASP.NET Web服务,在那里图像将保存为文件。我已经看到了几种方法来实现这一点,我选择了这种方法:将图像转换为字节数组->将字节数组转换为字符串->使用KSOAP2将字符串发送到web服务->在web服务接收字符串->将其转换为字节数组-> 将其另存为图像: IVtest = (ImageView)findViewById(R.id.carticon); BitmapDrawable drawable = (BitmapDra
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服务。
在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
谢谢从字符串到图像的转换似乎有些问题。此外,您没有处理将泄漏内存的流
请尝试以下方法:
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;
}
}
非常感谢,这就成功了。映像最终位于服务器上:)