我有一个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();
}
}
这个应用已经成功使用了这个和另一个服务,唯一的问题是在提交图像文件作为字节数组,它的功能,但我不能在测试中渲染图像,以确保它发送正常。我确信这很简单,我很想念。感谢您的反馈......
答案 0 :(得分:2)
我搞定了,Android代码工作正常,问题出在服务和我的测试网页上。将传入的字节数组作为update语句的SQL参数处理所需的服务,如下所示:
cmd.Parameters.Add("@arrayToInsert", SqlDbType.Image, img.Length).Value = img;
其中“img”是来自Android的传入字节数组。然后在测试网页中,我像这样渲染图像:
MemoryStream stream = new MemoryStream();
SqlCommand command = new SqlCommand("select photo from table where pkid = @ImageID", con);
command.Parameters.AddWithValue("@ImageID", Request.QueryString["ImageID"]);
byte[] image = (byte[])command.ExecuteScalar();
stream.Write(image, 0, image.Length);
System.Drawing.Image bitmap = new Bitmap(stream);
Response.ContentType = "image/jpeg";
bitmap.Save(Response.OutputStream, ImageFormat.Jpeg);
con.Close();
stream.Close();
这就是它所需要的一切!感谢@andrewr73提供建议!