Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将图像存储在文件夹laravel中_Php_Laravel - Fatal编程技术网

Php 将图像存储在文件夹laravel中

Php 将图像存储在文件夹laravel中,php,laravel,Php,Laravel,我有一小段代码,可以从表单中获取请求输入文件,并将其移动到文件夹中。这是: $destinationPath = 'uploads'; $filename = $file->getClientOriginalName(); $upload_success = $file->move($destinationPath, $filename); 是的,上面的代码可以工作,但是我想做的是每次我上传一张图片时,它都会有一个唯一的名称,这样它就不会覆盖文件夹中的任何图片。现在,我就是这么

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

$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);
function generateRandomString($length=8){
$characters='0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz';
$charactersLength=strlen($characters);
$randomString='';
对于($i=0;$i<$length;$i++){
$randomString.=$characters[rand(0,$charactersLength-1)];
}
返回$randomString;
}
$destinationPath='uploads';
$rand=md5(generateRandomString());
$filename=$rand.“38290;”$file->getClientOriginalName();
$upload\u success=$file->move($destinationPath,$filename);

这将输出类似于7C72445850A11C68747793C86554127uJellyfish.jpg的内容,但它看起来不整洁。这有什么诀窍吗?谢谢。

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

您还可以检查以下内容:


只需删除此处的
md5
$rand=md5(generateRandomString())

因为生成了一个随机字符串,然后对其进行散列处理


我已经设法解决了我的问题。首先按照Abdulla的建议删除
md5
,然后执行以下操作:

$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

删除此处的
md5
$rand=md5(generateRandomString())为什么不检查文件是否存在,以及它是否将_1添加到新文件名?是的@Abdulla是正确的。因为您生成了一个随机字符串,然后对其进行哈希运算。@aldrin27您可能需要检查我的答案并提出更多建议。谢谢。用户希望使用
ID的文件名是什么?
?您可以查看我的答案并提出更多建议。非常感谢。