【问题标题】:Android post byte array(image) to WCF restful serviceAndroid 将字节数组(图像)发布到 WCF RESTful 服务
【发布时间】:2012-03-13 04:34:11
【问题描述】:

我有一个 WCF 服务,我可以毫无问题地向其发布字符串,但现在我试图将一个字节数组作为字符串发布,这就是我遇到问题的地方。我的目标是拍照,将其转换为 byte(),将其发送到 WCF 服务,WCF 服务将插入我的数据库。我不确定我是否走错了路,但我找不到任何关于将图像保存到 WCF 的好的解释。

这里是httpposting的android代码:

        HttpPost request = new HttpPost(SERVICE_URL + "/SaveAssmt");
        request.setHeader("Accept", "application/json");
        request.setHeader("Content-type", "application/json");

        JSONStringer assmt = new JSONStringer()
        .object()
            .key("data")
                .object()
                    .key("sFacID").value(res.get_sFacID())
                    .key("sResID").value(res.get_sResID())                   
                    .key("byteImage").value(new String(imagedata)) //imagedata is my byte() containing the image
                .endObject()
            .endObject();
        StringEntity entity = new StringEntity(assmt.toString());

        request.setEntity(entity);
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpResponse response = httpClient.execute(request);

以下是 WCF 片段:

<OperationContract()> _
<WebInvoke(Method:="POST", UriTemplate:="SaveAssmt", BodyStyle:=WebMessageBodyStyle.WrappedRequest, ResponseFormat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json)> _
Sub SaveAssmt(data As AssmtResponses)

然后我的 SaveAssmt 方法只是插入到数据库中,只要我不传递图像数据,它就可以工作。一旦我传递了图像数据,我就会收到一个 400: Bad Request 错误,所以我不确定是因为字节大小太大还是可能是什么情况。如果有人能指出我正确的方向,我将非常感谢任何帮助。谢谢。

【问题讨论】:

    标签: c# java android wcf


    【解决方案1】:

    使用标准格式编码,例如 Base64(常见于网络和移动应用程序)。然后,您可以 a) 在服务器端将图像重新构造为二进制文件,或者 b) 将编码的字符串存储在数据库中并根据需要提供服务。答案取决于您的特定应用需求。

    【讨论】:

    • 感谢您的回复。我尝试使用 .key("byteImage").value(Base64.encode(imagedata,Base64.DEFAULT)) 但它没有保存整个字符串。看起来它只保存了字符串中的前 20 个左右的字符。
    • 我没有在 Android 上进行 base64 编码,但听起来它使用了一种流式机制,缓冲区大小只有 20 个字节(给予或接受)。如果是这样,请找到一个允许您将整个图像“流式传输”到 base64 中的编码示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2012-03-03
    相关资源
    最近更新 更多