我有一小段代码可以从表单中获取请求输入文件,并将其移动到文件夹中。这是:
$destinationPath = 'uploads';
$filename = $file->getClientOriginalName();
$upload_success = $file->move($destinationPath, $filename);
是的,上面的代码有效,但我想要做的是每次上传图片时,它都会有一个唯一的名称,因此它不会覆盖文件夹中的任何图片。现在这就是我所做的:
function generateRandomString($length = 8) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
$destinationPath = 'uploads';
$rand = md5(generateRandomString());
$filename = $rand."_".$file->getClientOriginalName();
$upload_success = $file->move($destinationPath, $filename);
这将输出类似7c724458520a11c68747793c86554127_Jellyfish.jpg
的内容,但看起来不整洁。这有诀窍吗?谢谢。
答案 0 :(得分:2)
只需删除md5
$rand = md5(generateRandomString());
即可
因为会生成一个随机字符串,然后对其进行哈希
答案 1 :(得分:1)
创建唯一文件名的一种常见方法是使用时间。
你也可以检查一下:
答案 2 :(得分:1)
我设法解决了我的问题。首先按照md5
的建议删除Abdulla
,然后执行此操作:
$destinationPath = 'uploads';
$rand = generateRandomString();
$file_list = File::files('uploads'); //returns an array of all of the files in a given directory.
do {
$filename = $rand."_".$file->getClientOriginalName();
} while(in_array("uploads/".$filename, $file_list)); //keep generating a string until it doesn't exist in the given directory.
$upload_success = $file->move($destinationPath, $filename); //move the file