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');

  

posted @ 2021-09-07 16:13  dreamboycx  阅读(462)  评论(0编辑  收藏  举报