Android:使用 MultipartEntity 上传大文件

根据这个答案 "Android 使用 HTTP 多部分表单数据将视频上传到远程服务器"我完成所有步骤.p>

但我不知道如何为服务器端编码!我的意思是一个 PHP 简单的页面,为我最可靠的敌人上传服务.

另一个问题是:YOUR_URL(以下代码段的第 3 行)必须是那个 PHP 页面的地址?

private void uploadVideo(String videoPath) throws ParseException, IOException {HttpClient httpclient = new DefaultHttpClient();HttpPost httppost = 新的 HttpPost(YOUR_URL);FileBody filebodyVideo = new FileBody(new File(videoPath));StringBody title = new StringBody("文件名:" + videoPath);StringBody description = new StringBody("这是视频的描述");MultipartEntity reqEntity = new MultipartEntity();reqEntity.addPart("videoFile", filebodyVideo);reqEntity.addPart("标题", 标题);reqEntity.addPart("描述", 描述);httppost.setEntity(reqEntity);//调试System.out.println("执行请求" + httppost.getRequestLine());HttpResponse 响应 = httpclient.execute( httppost );HttpEntity resEntity = response.getEntity();//调试System.out.println(response.getStatusLine());如果(resEntity!= null){System.out.println(EntityUtils.toString(resEntity));}//万一如果(resEntity!= null){resEntity.consumeContent();}//万一httpclient.getConnectionManager().shutdown();}

解决方案

这段代码运行正常,我应该使用的 PHP 代码就这么简单:

注意 videoFile 必须完全匹配

reqEntity.addPart("videoFile", filebodyVideo);

您可能面临的最重要问题是服务器配置中 post_max_sizeupload_max_filesize 的默认值!由于默认值太小,当您尝试上传大文件时,PHP 脚本返回:"upload_fail_php_file",没有错误或异常抛出.所以请记住将这些值设置得足够大...

享受编码.

According this answer "Android upload video to remote server using HTTP multipart form data" I do all steps.

But I don't know how I code for server side! I mean a PHP simple page that serve my reauest foe upload.

And another question is that : YOUR_URL (3rd line of following snippet) must be address of that PHP page?

private void uploadVideo(String videoPath) throws ParseException, IOException {

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(YOUR_URL);

    FileBody filebodyVideo = new FileBody(new File(videoPath));
    StringBody title = new StringBody("Filename: " + videoPath);
    StringBody description = new StringBody("This is a description of the video");

    MultipartEntity reqEntity = new MultipartEntity();
    reqEntity.addPart("videoFile", filebodyVideo);
    reqEntity.addPart("title", title);
    reqEntity.addPart("description", description);
    httppost.setEntity(reqEntity);

    // DEBUG
    System.out.println( "executing request " + httppost.getRequestLine( ) );
    HttpResponse response = httpclient.execute( httppost );
    HttpEntity resEntity = response.getEntity( );

    // DEBUG
    System.out.println( response.getStatusLine( ) );
    if (resEntity != null) {
      System.out.println( EntityUtils.toString( resEntity ) );
    } // end if

    if (resEntity != null) {
      resEntity.consumeContent( );
    } // end if

    httpclient.getConnectionManager( ).shutdown( );
}

解决方案

This code worked properly and PHP code I should use is as simple as this:

<?php

    $file_path = "uploads/";

    $file_path = $file_path . basename( $_FILES['videoFile']['name']);
    if(move_uploaded_file($_FILES['videoFile']['tmp_name'], $file_path)) {
        echo "success";
    } else{
        echo "upload_fail_php_file";
    }
 ?>

NOTE that videoFile must match exactly with

reqEntity.addPart("videoFile", filebodyVideo);

And the MOST Important problem you probably face to, is default value of post_max_size and upload_max_filesize in the server config! As default is too small and when you try to upload large files, the PHP script return : "upload_fail_php_file" with no error or exception throwing. So remember to set these values as big as enough...

Enjoy coding.

相关文章