将图像存储在文件夹laravel中

时间:2015-09-15 07:05:30

标签: php laravel

我有一小段代码可以从表单中获取请求输入文件,并将其移动到文件夹中。这是:

$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的内容,但看起来不整洁。这有诀窍吗?谢谢。

3 个答案:

答案 0 :(得分:2)

只需删除md5

上的$rand = md5(generateRandomString());即可
  

因为会生成一个随机字符串,然后对其进行哈希

答案 1 :(得分:1)

创建唯一文件名的一种常见方法是使用时间。

你也可以检查一下:

https://laracasts.com/discuss/channels/general-discussion/how-to-generate-long-unique-name-for-filename

答案 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