Laravel 4 - 更改(上传图片名称)

时间:2014-02-27 09:57:20

标签: php image upload laravel-4

我想使用随机名称重命名图像。 我是否必须使用某种逻辑加密?

我在我的Controller 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');
     }
    }

我该怎么做?

2 个答案:

答案 0 :(得分: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的助手功能之一 - 信息here 这是它的来源。如果传递闭包,它要么执行闭包(匿名函数),要么只返回传递的内容(值)。

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

我选择使用它来使代码更具可读性。在闭包内部使用的$filename变量被修改并返回 - 在它之外不需要闭包 另外,您可以在$filename函数的范围内使用postAdd变量,它们只是不混合,它们的值不可能被意外覆盖,等等......

答案 1 :(得分:0)

'str_random'

生成给定长度的随机字符串。

$string = str_random(40);//random string of length 40

http://laravel.com/docs/helpers#strings