我有一个 Android 应用程序(API 10),其中一项功能允许用户捕获照片并使用 ksoap 将其发送到 asp.net Web 服务。Android 应用程序运行良好,将包括图像字节数组在内的所有数据发送到数据库。SQL 数据库有一个用于存储字节数组的数据的 Image 字段。这一切都按预期工作。但是,在进行测试以确保没有损坏、正确保存图像等时,我尝试使用 .ashx 页面渲染图像,它只显示“损坏的图像”图标。我确定这是我想念的简单的东西,但是在盯着它看了很长时间之后,它没有任何意义。
这是抓取字节数组的 Android 应用程序片段:
byte[] ba;
String filepath = "/sdcard/";
File imagefile = new File(filepath + "img.jpg");
FileInputStream fis = new FileInputStream(imagefile);
Bitmap bm = BitmapFactory.decodeStream(fis);
Bitmap sbm = Bitmap.createScaledBitmap(bm, 640, 480, false);
if(bm != null)
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
sbm.compress(Bitmap.CompressFormat.JPEG, 100, out);
ba = out.toByteArray();
}
下面是创建 SOAP 并执行它的 Android 应用程序片段:
SoapObject request = new SoapObject(NAMESPACE, SEND_METHOD_NAME);
request.addProperty("pkid", pkid);
request.addProperty("img", ba);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
MarshalBase64 marshal = new MarshalBase64();
marshal.register(envelope);
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(SEND_URL);
try
{
androidHttpTransport.call(SEND_SOAP_ACTION, envelope);
}
catch(Exception e)
{
e.printStackTrace();
}
这是接收 SOAP 消息的 ASP.Net Web 服务的片段:
[WebService(Namespace = "http://www.domain.com")]
[System.Web.Services.Protocols.SoapDocumentService(RoutingStyle = System.Web.Services.Protocols.SoapServiceRoutingStyle.RequestElement)]
[System.ComponentModel.ToolboxItem(false)]
public class sendWorkOrderService : System.Web.Services.WebService
{
public SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["main"].ConnectionString);
[WebMethod(Description = "This is it", EnableSession = false)]
public void receive(int pkid, byte[] img)
{
if (img.Length > 0)
{
cmd = new SqlCommand("update table set photo = @arrayToInsert where pkid = " + pkid, con);
cmd.Parameters.Add("@arrayToInsert", SqlDbType.Image, 16).Value = img;
}
else
{
// do nothing
}
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
这个应用程序已经成功地使用了这个和另一个服务,唯一的问题是将图像文件作为字节数组提交,它起作用,但我无法在测试中渲染图像以确保它发送正常。我敢肯定这是我想念的简单的东西。感谢您的反馈...