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

查看:463
本文介绍了使用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类型的请求调用执行程序.

Then call the exec on the request of type POST.

这篇关于使用HttpClient发布Base64编码的视频文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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