我想使用随机名称重命名图像。 我是否必须使用某种逻辑加密?
我在我的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');
}
}
我该怎么做?
答案 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