# laravel-文件操作实用笔记 # 这是什么 # 开始愉快的玩耍. # 文件的基本操作 ## 增加文件 ## 删除文件 ## 获取文件 # 发送下载请求 ## 这里有一个坑需要注意 通过`Storage::put`写入文件,默认是本地储存,路径是,`Storage/app`。通过配置文件可以设置。 ``` $ret = Storage::put($dir . $name, $body); ``` 问题就出在这了。你写入的路径是本地的,你发送下载请求的地方,你不让获取出路径是什么鬼! ``` return response()->download( realpath($dir.$name), '我:是>文件|"名字?*哦.zip' ); ``` 那么,Storage::put,显然不能 ` realpath($dir.$name) ` 得到绝对路径了. 这里还有一个坑,那么你得不到我是不是可以直接传给你啊。那么就出现了下面这种更为奇葩的代码。 你不是获取不到吗,我给你读出来还不行?然而还真不行。 download($filePath,$name) $filePath,文件的绝对路径或者相对路径 $name,文件名 ``` return response()->download( Storage::read( $att->filepath ), $att->originalname ); ``` 从而衍生出,我的奇葩用法,这当然是可以用的,只是看起来不优雅. 通过获取Storage保存文件的目录,然后再拼接put写入的路径,那么就得到绝对路径了。 ``` $rootDir = Config::get('filesystems.disks.local.root'); return response()->download( $rootDir .'/'. $dir . $name , '我:是>文件|"名字?*哦.zip' ); ``` 是不是很奇葩。这么简单的命令居然需要自己拼接。 然而我翻遍了Flysystem,还真的是没有!! 那我能不能自己加一个`Storage::getPath`来获取绝对路径? ``` $ret = Storage::getPath($dir . $name); ``` 然而,这想想是可行的,但是我改了也是框架里面的模块,下次一updata不就给覆盖了。 最终选择放弃。本人水平不够啊。着实改不来,还是上github提交问题,让别人去加吧,哈哈。 # 体会 不知道是我想多了,还是方式不对,还是写的方式不对,亦或者是人懒了,思维简单了,总想着别人的代码一定是好的,一定里面就有的,一定不用自己实现的,一定是一句代码搞掂的事情。 为什么一个简单的下载文件就这么多坑呢。说好的优雅呢。 还是laravel做少了。 其实这个功能对于小玩意来讲,有点用处,稍微大一点都上云储存了, 所以我这个问题就不是大问题了,只是程序员写代码的矫情问题,但是你不矫情,怎么实现写少点,事情做多点呢。是吧~ 对于云存储的下载,只需要做一个302重定向,跳到下载地址即可,无需自己服务器读取文件发送。 > 其实没写完,回头再补充