使用 HttpClient 发布 Base64 编码的视频文件 [英] Posting Base64 encoded video files using HttpClient
问题描述
我正在尝试使用 HttpClient 将媒体文件发布到服务器.我的代码适用于图像文件,但无法重播视频文件 (mp4).我发布文件的代码:
I am trying to post media files to a server using HttpClient. My code works fine for image files, however the video files (mp4) can't be replayed. My code for posting the files:
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 编码;
The files are Base64 encoded using Base64.encodeBase64String(bytes);
推荐答案
https://hc.apache.org/httpcomponents-client-4.3.x/examples.html
查看示例 POST 程序...
check out the sample POST programs...
使用以下内容将 mp4 映射到字节,然后将其包装在正确的实体"类型中以执行 POST..
use the following to map an mp4 to bytes and then wrap it in the proper 'Entity' type for a executing a POST..
FileInputStream fis = new FileInputStream(mfile);
FileChannel fc = fis.getChannel(); // Get the file's size and then map it into memory
int sz = (int)fc.size();
MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);
byte[] data2 = new byte[bb.remaining()];
bb.get(data2);
ByteArrayEntityHC4 reqEntity = new ByteArrayEntityHC4(data2);
httpPost.setEntity(reqEntity);
fis.close();
然后对 POST 类型的请求调用 exec.
Then call the exec on the request of type POST.
这篇关于使用 HttpClient 发布 Base64 编码的视频文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!