在Json中发送图像:400 Bad request

时间:2013-08-15 14:25:47

标签: c# android json web-services base64

从我的android我试图将带有一类数据的图像发送到IIS Web服务。 (C#)

问题是我得到400 Bad request

图像被编码为Base64。然后将json与其他类元素放在一起。

我的猜测是Base64在Json中无效。所以服务器不理解它。 如果我将字符串设置为"",则可以接受帖子。

所以问题是,如何在Base64数组中使Json有效?(我尝试过URL.Encode但没有成功)。

如何将图像从android发送到webservice?

 Gson gson = new Gson();

 String json = gson.toJson(record);  // record has param { String base64Photo }

2 个答案:

答案 0 :(得分:1)

图像有多大?我很确定你超过了IIS Json的大小限制(默认值几乎是4 MB)。

检查此http://geekswithblogs.net/frankw/archive/2008/08/05/how-to-configure-maxjsonlength-in-asp.net-ajax-applications.aspx或此http://www.webtrenches.com/post.cfm/iis7-file-upload-size-limits

祝你好运!

答案 1 :(得分:1)

我会说实话 - 我从未将图像从Android上传到IIS网络服务,但在其他所有上下文中我总是使用File。创建文件并将其作为MultipartEntity上传很容易。另外,您不必一起使用Base64,这很好,因为它可以节省使用Base64带来的大约33%的开销增加。

private File createFileFromBm(Bitmap pic){
    File f = new File(context.getCacheDir(), "image");

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    pic.compress(CompressFormat.JPEG, 100, bos);
    byte[] data = bos.toByteArray();

    try{
        FileOutputStream fos = new FileOutputStream(f);
        fos.write(data);
        fos.close();
    } catch (IOException e){
        Log.e(TAG, e.toString());
    }

    return f;
}

以下是您创建MultipartEntity

的方法
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE;              
entity.addPart("photo", new FileBody(file, "image/jpeg"));
httpPost.setEntity(entity);
return httpClient.execute(httpPost, responseHandler);

我在这里使用HttpPostBasicResponseHandler从服务器接收JSON输出进行处理,但您可以随意执行任何操作。