如何确保文件上传适用于使用 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_size
和 upload_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);
我正在尝试使用 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_size
和 upload_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);