作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的目标是管理最大上传文件异常,并显示客户端友好消息,但我不知道控制它的最佳位置在哪里。这是我的 Controller 方法:
public function upload_file()
{
if (!Input::hasFile('file'))
return;
$utils = App::make('utils');
$file = Input::file('file');
$name = Input::get('name');
$size = $file->getSize();
if ($size > FileModel::$max_file_size)
return json_encode(array('success'=>false, 'message'=>sprintf('The file size should be lower than %smb.',FileModel::$max_file_size/1000000)));
$original_file_name = $file->getClientOriginalName();
$destination_directory = "";
$final_file_name = $utils->copy_file_to_location($file);
return json_encode(array('success'=>true, 'file'=>$original_file_name));
}
这是 utils copy_file_to_location 方法:
public function copy_file_to_location($file, $destination_directory = "")
{
if (!isset($file))
return;
$file_name = time()."_".$file->getClientOriginalName();
$file->move(app_path().'/storage/files/'.$destination_directory, $file_name);
return $file_name;
}
我不知道在哪里处理上传文件大小大于服务器最大上传文件大小变量时引发的异常。我应该在哪里以及如何处理它以显示用户友好的消息并且不锁定用户界面。顺便说一下,我在客户端使用 ExtJs 4。谢谢。
编辑
我找到了一个相关的question这很有帮助(这是同一个问题),但我需要知道在 Laravel 内部的什么地方,我应该检查它。
最佳答案
有两种情况:文件大小大于 php 变量 upload_max_filesize
,第二种是文件大小大于 post_max_size
变量。在第一个中,引发了一个异常,因此捕获它是一种简单的方法。在第二种情况下没有异常(exception),我使用了 this解决问题。
现在,在哪里检查这段代码:在 Laravel Controller aciton 方法中。我认为 Controller 操作中的代码从未被执行过,但我错了。所以最后这是解决这个问题的方法:
public function upload_file()
{
$file_max = ini_get('upload_max_filesize');
$file_max_str_leng = strlen($file_max);
$file_max_meassure_unit = substr($file_max,$file_max_str_leng - 1,1);
$file_max_meassure_unit = $file_max_meassure_unit == 'K' ? 'kb' : ($file_max_meassure_unit == 'M' ? 'mb' : ($file_max_meassure_unit == 'G' ? 'gb' : 'unidades'));
$file_max = substr($file_max,0,$file_max_str_leng - 1);
$file_max = intval($file_max);
//handle second case
if((empty($_FILES) && empty($_POST) && isset($_SERVER['REQUEST_METHOD']) && strtolower($_SERVER['REQUEST_METHOD']) == 'post'))
{ //catch file overload error...
//grab the size limits...
return json_encode(array('success'=>false, 'message'=>sprintf('The file size should be lower than %s%s.',$file_max,$file_max_meassure_unit)));
}
try{
if (!Input::hasFile('file'))
return;
$utils = App::make('utils');
$file = Input::file('file');
$name = Input::get('name');
$size = $file->getSize();
if ($size > $file_max)
return json_encode(array('success'=>false, 'message'=>sprintf('El tamaño del archivo debe ser menor que %smb.',$file_max)));
$original_file_name = $file->getClientOriginalName();
$destination_directory = "";
$final_file_name = $utils->copy_file_to_location($file);
return json_encode(array('success'=>true, 'file'=>$original_file_name));
}
catch (Exception $e)
{
//handle first case
return json_encode(array('success'=>false, 'message'=>sprintf('The file size should be lower than %s%s.',$file_max,$file_max_meassure_unit)));
}
}
关于php - 处理Laravel 4上传大文件异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20975542/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!