我正在尝试将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");
}
}
答案 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)
- 在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>