【发布时间】:2014-11-04 20:46:27
【问题描述】:
我正在尝试使用 HttpClient 将媒体文件发布到服务器。我的代码适用于图像文件,但无法重播视频文件 (mp4)。我发布文件的代码:
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost httppost = new HttpPost(REMOTE + "/add_file.php");
MultipartEntityBuilder mpEntity = MultipartEntityBuilder.create();
ContentBody cbFile = null;
String mimeType = "";
if (file.getName().endsWith(".jpg") || file.getName().endsWith(".jpeg")) {
mimeType = "image/jpeg";
} else if (file.getName().endsWith(".mp4")) {
mimeType = "video/mp4";
}
mpEntity.addTextBody("recipient_phone", recipientPhoneStr);
mpEntity.addTextBody("sender_phone", "55000");
mpEntity.addTextBody("sender_key", "my_secret");
mpEntity.addTextBody("file_name", file.getName());
mpEntity.addTextBody("userfile", encodeFileToBase64Binary(file));
httppost.setEntity(mpEntity.build());
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
if (response.getStatusLine().toString().compareTo(HTTP_ERROR) == 0) {
throw new IOException(HTTP_ERROR);
}
if (resEntity != null) {
System.out.println(EntityUtils.toString(resEntity));
}
if (resEntity != null) {
resEntity.consumeContent();
}
httpclient.getConnectionManager().shutdown();
文件使用 Base64.encodeBase64String(bytes); 进行 Base64 编码;
【问题讨论】:
-
您是否检查过您是否正确接收了所有字节?您可能正在达到 php 的 post_max_size 或 apache/nginx 限制。
-
谢谢巴特。是的,post_max_size 就足够了...如何检查 apache 限制?
-
将文件映射到字节并将缓冲区包装在 'byteArrayEntity' 中以供 POST 使用。
标签: java httpclient apache-commons