如何在服务器上上传大型视频文件?

时间:2014-10-02 10:27:45

标签: android

如何在服务器上上传大型视频文件? 我想在服务器上获得高达50到60mb的视频文件,但我不知道它是如何可能的。我无法在服务器上上传最多15mb的视频文件。请有任何解决方案然后让我知道。

public static String postRequestvideo_test(String url,byte [] video,             byte [] image,List data){

    String result = "";
    Log.i("video_upload", video + "");
    try {
        HttpPost httpPost = new HttpPost(url);
        // StringEntity se;
        // se = new StringEntity(data, HTTP.UTF_8);
        // httpPost.setEntity(new UrlEncodedFormEntity(data));
        httpPost.setEntity(new UrlEncodedFormEntity(data, "UTF-8"));
        MultipartEntity mpEntity = new MultipartEntity(
                HttpMultipartMode.BROWSER_COMPATIBLE);

        mpEntity.addPart("video_thumbnail", new ByteArrayBody(image,
                "imagename" + ".jpeg"));
        mpEntity.addPart("video",
                new ByteArrayBody(video, "hyman" + ".mp4"));

        mpEntity.addPart("user_key", new StringBody("user_key_test"));
        mpEntity.addPart("video_name", new StringBody("video_name_test"));
        mpEntity.addPart("video_duration", new StringBody(
                "video_duration_test"));

        mpEntity.addPart("video_thumbnail_extn", new StringBody(
                "video_thumbnail_extn_test"));
        httpPost.setEntity(mpEntity);
        HttpParams httpParameters = new BasicHttpParams();
        int timeoutConnection = 90000000;
        HttpConnectionParams.setConnectionTimeout(httpParameters,
                timeoutConnection);
        int timeoutSocket = 90000000;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

        DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
        BasicHttpResponse httpResponse = (BasicHttpResponse) httpClient
                .execute(httpPost);
        HttpEntity entity = httpResponse.getEntity();
        if (entity != null) {
            result = EntityUtils.toString(entity);
            result = result.trim();
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        return "-333" + e.toString();
    }
    return result;
}

2 个答案:

答案 0 :(得分:2)

//旧答案,请检查以下新答案

您遇到的问题可能是尝试同时在内存中加载整个视频(或任何大型文件),因为该应用具有允许的最大有限内存 ,如果你超过它,它将导致应用程序崩溃,并给你内存不足。

您需要做的是打开一个连接并将其设置为" Keep-Alive" ,然后打开一个 FileInputStream 来阅读您的视频,并开始读取和发送为块(1-4 MB可能是一个很好的大小),直到发送所有文件字节。这样,您就可以确保在您的应用未达到允许的内存限制时,流正在发送数据。

// 新答案

请注意,以上是一个老答案,现在我只使用 MultipartEntity (org.apache.http.entity.mime.MultipartEntityBuilder)并且它自己处理任何文件大小

答案 1 :(得分:2)

mpEntity.addPart(Constant.VIDEO, new FileBody(file,
                         "video/mp4"));

我只是把它完成了。