使用 HttpClient 发布 Base64 编码的视频文件 [英] Posting Base64 encoded video files using HttpClient

查看:52
本文介绍了使用 HttpClient 发布 Base64 编码的视频文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆