欢迎光临
我们一直在努力

laravel storage指定存储文件名

有时候我们要使用storage存储文件,但官方只提供了以有限的文档,让我们只好一个个猜测。

自动文件流

如果你想要Laravel自动将给定文件流输出到对应存储路径,可以使用putFileputFileAs方法,该方法接收Illuminate\Http\FileIlluminate\Http\UploadedFile实例,然后自动将文件流保存到期望的路径:

use Illuminate\Http\File;

// Automatically calculate MD5 hash for file name...
Storage::putFile('photos', new File('/path/to/photo'));

// Manually specify a file name...
Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');//其中photos为上传图片要存储的位置,/path/to/photo为要上传的文件,photo.jpg为指定的文件名

这里有一些关于putFile方法的重要注意点,注意到我们只指定了目录名,默认情况下,putFile方法会基于文件内容自动生成文件名。实现原理是对文件内容进行MD5哈希运算。putFile方法会返回文件路径,包括文件名,以便于在数据库中进行存储。

putFileputFileAs方法还接收一个用于指定存储文件“能见度”的参数,这在你将文件存储到云存储(如S3)平台并期望文件可以被公开访问时很有用。

其中photos为上传图片要存储的位置,/path/to/photo为要上传的文件,photo.jpg为指定的文件名。

我使用的实例如下:

$folderName = 'public/upload/images/' //上传后存储路径为/storage/app/public/upload/images/,注意,public/必须添加,不然会报错,上传路径设置了软件连接,会自动软链接至storage/app/public,如果因为storage目录是无法直接访问的,public不存在,会导致错误。
$extension = $this->file->getClientOriginalExtension() ?: 'png';
// 设置保存的文件名
$filename = $filename ? :date("YmdHis", time()).'_'.str_random(2);
$safeName  = $filename . '.' . $extension;

Storage::putFileAs($folderName, new File($this->file), $safeName);

最后贴上此段完整代码

        $year_mouth = date("Ym", time());
        $folderName = ($type == 'avatar')
            ? 'public/upload/avatars'
            : 'public/upload/images/' . $year_mouth . '/' . date("d", time()) . '/' . Auth::user()->id;
        // 注:上面的配置必须加public,才能被前台直接访问,文件存储在Storage/app/public下
        // 设置存储路径,注:Storage::disk()里的参数是local(默认是Storage/app),public(public目录),或者其他云存储等
	//$destinationPath = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix() . '/' . $folderName;
        $extension = $this->file->getClientOriginalExtension() ?: 'png';
        // 设置保存的文件名
        $filename = $filename ? :date("YmdHis", time()).'_'.str_random(2);
        $safeName  = $filename . '.' . $extension;
        // 保存文件
        //$this->file->move($destinationPath, $safeName);//$destinationPath参数已经注销
		Storage::putFileAs($folderName, new File($this->file), $safeName);

 

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » laravel storage指定存储文件名

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址