我在尝试使用 HTTPPost 将包含转换为字节数组的图像的 zip 文件上传到 restful wcf 服务时遇到问题。字节数组被编码到 BASE64 中,括在 JSON 对象中,并使用带有 2 个参数的 StringEntity 发送。大约 6KB 的文件被上传而没有任何缺陷,但超过 6KB 的文件没有发送,我收到一个错误请求 - 400 状态代码。以下代码用于上传文件:
文件文件 = 新文件(dir, "file.zip");
byte[] buf = new byte[10240000];
fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum);
Log.v("read : buf ", buf + " : " + readNum + " bytes");
}
byte[] bytes = bos.toByteArray();
imgData = Base64.encodeToString(bytes, Base64.DEFAULT);
JSONObject sendData=null;
Log.d("Image Data length", imgData.length()+"");
Log.d("Image data ", imgData);
try {
sendData= new JSONObject();
sendData.put("_binaryData", imgData);
sendData.put("_fileName", "fileName");
sendData.put("userid", userID);
int len = imgData.length();
int l=sendData.toString().length();
entity = new StringEntity(sendData.toString());
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Send request
int len = imgData.length();
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
request.setHeader("Connection", "Keep-Alive");
request.setParams(httpParameters);
DefaultHttpClient httpClient = new DefaultHttpClient();
request.setEntity(entity);
HttpResponse response = httpClient.execute(request);
HttpEntity responseEntity = response.getEntity();
String str=response.getStatusLine().getReasonPhrase();
int i=response.getStatusLine().getStatusCode();
Log.v("ReasonPhrase :: StatusCode",str+" "+i);
int contentLength = (int) responseEntity.getContentLength();
char[] buffer = new char[(int) responseEntity
.getContentLength()];
InputStream stream = responseEntity.getContent();
请帮助我解决这个问题。
如果具有 <6k 字节的消息可以通过,但具有>6k 的消息不能通过,我会查看客户端和主机的限制,例如:
MaxBufferSize
MaxBufferPoolSize
MaxReceivedMessageSize
您没有说您是否可以控制主机服务器设置,但您可以增加和减少前面提到的项目的限制。如有必要,您可以将它们设置为 Integer.Max,该大小允许文件上传> 1 GB。