2014-02-27 89 views
0

我想使用随机名称重命名图像。 我是否必须使用一些逻辑加密?Laravel 4 - 更改(上传图像名称)

我有我的控制器postAdd的功能上传的图像和保存的一些信息:

public function postAdd() 
    { 
    $path = 'uploads/noticias'; 
    $file = Input::file('archivo'); 
    $archivo=$file->getClientOriginalName(); 
    $extension =$file->getClientOriginalExtension(); 
    $tamano=$file->getSize(); 
    $upload = $file->move($path, $archivo); 
    if($upload) 
    { 
     $inputs=Input::All(); 
     $n= new Noticias; 
     $n->titulo = $inputs["titulo"]; 
     $n->contenido=$inputs["contenido"]; 
     $n->seo_slug=$inputs["titulo"]; 
     $n->fecha=date("Y-m-d"); 
     $n->foto=$archivo; 
     $n->save(); 
     return Redirect::to('add'); 
    }else 
    { 
     return Redirect::to('add'); 
    } 
    } 

我该怎么办呢?

回答

3

文件名应该包含扩展为好。
要创建文件名,请从上传的文件生成随机字符串并附加扩展名。 最好是降低字符大小写(或者使用upprecase,但保持不变) 在我为您发布的示例中,我使用了value函数,该函数返回您传递的任何结果 - 在这种情况下,我传递匿名函数生成文件名。

public function postAdd() 
{ 
    $path = 'uploads/noticias'; 
    $file = Input::file('archivo'); 
    $archivo = value(function() use ($file){ 
     $filename = str_random(10) . '.' . $file->getClientOriginalExtension(); 
     return strtolower($filename); 
    }); 
    $tamano = $file->getSize(); 
    $upload = $file->move($path, $archivo); 
    if($upload) { 
     $inputs=Input::All(); 
     $n= new Noticias; 
     $n->titulo = $inputs["titulo"]; 
     $n->contenido=$inputs["contenido"]; 
     $n->seo_slug=$inputs["titulo"]; 
     $n->fecha=date("Y-m-d"); 
     $n->foto=$archivo; 
     $n->save(); 
     return Redirect::to('add'); 
    } else { 
     return Redirect::to('add'); 
    } 
} 




编辑

说明的要求,在评论...

函数:
要清楚,它不是原生的PHP函数。它是Laravel的帮手功能之一 - info here
这是它的源码。它在执行闭包时执行闭包(匿名函数),或者只返回传入的值(值)。

/** 
* Return the default value of the given value. 
* 
* @param mixed $value 
* @return mixed 
*/ 
function value($value) 
{ 
return $value instanceof Closure ? $value() : $value; 
} 

我选择使用它来使代码更具可读性。 $filename在闭包中使用的变量被修改并返回 - 在闭包之外不需要闭包。
此外,您可以在postAdd功能的范围内使用$filename变量,他们只是不混合,这是不可能的值由事故自动覆盖,等等...

+0

谢谢您的回答,非常有用。我不知道你是否可以解释一些事情......我看到你使用匿名php函数,但是它的内容是什么?名为'value()'的部分。我真的很困惑这是什么,并且在php文档中看不到任何名为value的东西。难道没有它只能调用匿名函数,它仍然可以正常工作吗? – haakym

+1

您好,我在原始答案中添加了解释。希望能帮助到你。 – Andreyco

+0

感谢您的解释,非常感谢您和您的快速回复!希望我能找到一个时间在我的应用程序中使用它来获取laravel。 :) – haakym