如何在android / base64映像中解决HTTP 414“Request URI too long”错误?

时间:2015-10-26 10:51:35

标签: android http

我正在尝试将base64编码的图像从我的应用程序拉到数据库(在我的服务器中),但是我收到了这个错误。

the server responded with a status of 414 (Request-URI Too Long)

我知道对于URL,缩短它们可以修复错误,但我无法缩短base64字符串。

如何修复此问题。

HttpGet httpGet = new HttpGet(URL);

try {

 HttpResponse response = httpClient.execute(httpGet);
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        if (statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream inputStream = entity.getContent();
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
            }
            inputStream.close();
        } else {
            Log.d("JSON", "Failed to download file");
        }
    }

3 个答案:

答案 0 :(得分:3)

尝试改造。在改造中使用@FormUrlEncoded和@POST(" ur_api_name") 并使用@Field(" data")注释发送数据。

答案 1 :(得分:0)

首先,如果是这样的话:

  

我正在尝试将base64编码的图像从我的应用程序拉到数据库(在我的服务器中),但是我收到了这个错误。

你应该改变

Log.d("JSON", "Failed to download file");

Log.d("JSON", "Failed to upload file");

从您的应用程序发送到数据库是上传,而不是下载。

由于您要上传,您应该使用HTTPGet请求,而是HTTPPost请求。不同之处在于GET用于下载,而POST用于上载。因此允许POST有一个正文。

正文是邮件的实际内容。现在,您似乎在请求中对图像进行编码,这不是一种好的做法。您已经遇到了它创建的问题。因为您正在使用正文,所以您必须更改服务器端应用程序。

要发送正文,请查看how to make httpPost call with json encoded body?。这个问题特别关于使用JSON主体,但无论如何都可以使用它。

答案 2 :(得分:0)

在客户端和服务器端使用 POST 方法代替 GET 方法

  • 在Android中通过 Retrofit 软件包
public interface TaskService {  

@FormUrlEncoded

@POST("tasks")

Call<String> createTask(@Field("title") String title);

}
  • 在服务器上的服务中,例如 WCF服务
[ServiceContract]

public interface IOperationService
{

[OperationContract]

[WebInvoke(Method = "POST", UriTemplate = "tasks", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]

string createTask();

}
  • 然后,您必须在WCF Servic的Web.config文件中设置 maxReceivedMessageSize 参数。
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="myServiceBinding" maxReceivedMessageSize="10485760" maxBufferSize="10485760" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00">
<security mode="None"/>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>