laravel 文件上传的写法
文件系统存储
文件系统的配置文件位于 config/filesystems.php 。
在这个文件中你可以配置所有「磁盘」。
每个磁盘代表特定的存储驱动及存储位置。
每种支持的驱动程序的示例配置都包含在配置文件中。
公共磁盘链接
一般文件上传如果上传在本地服务器,目录都不在public目录下,都是public的上一级目录storage下的app目录中,而这个目录是通过url访问不到的(URL地址是从public下算起)所以需要在public目录下建立storage/app下的软链接(linux叫法,windows叫快捷方式)
php artisan storage:link
需要使用的类
1 use Illuminate\Http\Request; 2 use Illuminate\Http\UploadedFile;
获取上传的文件
1 $file = $request->file('photo'); 2 $file = $request->photo;
判断 & 验证
//判断请求中是否存在name为photo的文件 if ($request->hasFile('photo')) { } //验证上传的文件是否有效,实际上只是使用is_uploaded_file校验是否是http表单post过来的 if ($request->file('photo')->isValid()) { }
文件路径 & 扩展名
UploadedFile
类还包含访问文件的全路径和扩展名的方法。 extension
方法会根据文件内容判断文件的扩展名。该扩展名可能会和客户端提供的扩展名不同:
$path = $request->photo->path(); $extension = $request->photo->extension();
$extension = $request->file('photo')->getClientOriginalExtension()
存储上传文件
要存储上传的文件,先配置好 文件系统。你可以使用 UploadedFile 的 store 方法把上传文件移动到你的某个磁盘上,该文件可能是本地文件系统中的一个位置,甚至像 Amazon S3 这样的云存储位置。
store 方法接受相对于文件系统配置的存储文件根目录的路径。这个路径不能包含文件名,因为系统会自动生成唯一的 ID 作为文件名。
store 方法还接受可选的第二个参数,用于存储文件的磁盘名称。这个方法会返回相对于磁盘根目录的文件路径:
$path = $request->photo->store('images'); $path = $request->photo->store('images', 's3');
如果你不想自动生成文件名,那么可以使用 storeAs
方法,它接受路径、文件名和磁盘名作为其参数:
$path = $request->photo->storeAs('images', 'filename.jpg'); $path = $request->photo->storeAs('images', 'filename.jpg', 's3');
if($request->hasFile('file')&&$request->file('file')->isValid()){ $file=$request->file('file'); $allowed_extensions = ["png", "jpg", "gif","jpeg"]; $extension = $file->getClientOriginalExtension(); if (!in_array($extension, $allowed_extensions)) { return $this->error('只能上传'.implode('、', $allowed_extensions).'格式的图片.'); }else{ $destinationPath = 'uploads/weixin/'; $preFileName = md5(time().rand(1000,9999)); $fileName=$preFileName.'.'.$extension; $file->move($destinationPath,$fileName); $filePath = asset($destinationPath.$fileName);//带着域名的路径 return $this->apiSuccess('上传图片素材成功.', ['data'=>$result,'file_path'=>asset($destinationPath.$fileName)]); } }else{ return $this->error('文件上传失败'); }
$request->file('file')->store('Uploads');