如何确保文件上传适用于使用 loopj AndroidAsyncHttp 的视频?

How to ensure file upload works with video using loopj AndroidAsyncHttp?

我正在尝试使用 loopj AndroidAsyncHttp 库从我的 android 应用程序将视频文件上传到我的服务器。上传图片会给出 "Success: 200" 响应,而尝试上传视频会给出 500 或 302 错误响应。这是我的上传方法:

    private void uploadVideoTwo(String filePath){

        AsyncHttpClient client = new AsyncHttpClient();

        File myFile = new File(filePath);
        RequestParams params = new RequestParams();
        try {
            params.put("file", myFile);
        } catch (FileNotFoundException e) {
            Log.e(TAG, "Params Exception: " + e.getMessage());
        }

        client.post(url, params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                Log.d(TAG, "Success: " + String.valueOf(statusCode));
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                Log.d(TAG, "Failure: " + String.valueOf(statusCode));
            }
        });


    }

我的 PHP 代码如下所示:

    <?php 

$result = array("success" => $_FILES["file"]["name"]);

$name= $_FILES['file']['name'];

$tmp_name= $_FILES['file']['tmp_name'];

$path= "uploads/";

if (isset($name)) {

    if (empty($name))
    {
        $result = array("success" => "error uploading file");
    }
    else
    {
        if (move_uploaded_file($tmp_name, $path . $name)) {
            $result = array("success" => "File successfully uploaded");
        }
    }
}
echo json_encode($result);
?>

Android Studio logcat 在视频文件上传过程中显示进度百分比,但在达到 100% 后给出错误响应。我正在使用 intent 打开相机来捕获时长为 30 秒且大小限制为 5 mb 的视频。我不知道为什么上传图片可以正常工作,但使用相同脚本上传视频却不行。

检查 php.ini 文件中 post_max_sizeupload_max_filesize 的值。默认值只有 2 兆字节,因此您应该将其更改为更合适的值。

要找出 php.ini 在您自己的主机上的位置,只需在您网站上的任何可用脚本中插入对 phpinfo() 的调用,然后在浏览器中查看输出。

对于流行的云平台:

在 Google Cloud Engine(标准或灵活环境)上将 php.ini 文件放入项目的根目录(与 app.yaml 一起),其中包含以下行:

post_max_size = 128M upload_max_filesize = 128M

在 Heroku 上,将 .user.ini 与上述内容相同的文件放在应用程序的根目录中。

看起来像是超时或文件大小问题。 php 脚本的默认执行时间为 30 秒。在您的 php.ini 文件中将其更改为 300(5 分钟)。

; Maximum execution time of each script, in seconds
max_execution_time=300

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize=32M

此外,通过将以下内容放在 php 脚本的开头来启用错误报告。它将为您提供更详细的问题描述。

error_reporting(E_ALL);
ini_set('display_errors', 1);