laravel的使用-文件上传

5 篇文章 0 订阅

目前php的各大常用框架都为我们直接封装好了文件上传的相关代码,不用再劳心劳力的自己写,使用起来也大同小异,省心不少

一  准备表单页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传测试</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">

</head>
<body>
  <div class="container">
    
     <div class="row">
       <div class="col-md-10">
		   <form class="form-horizontal 8" role="form" action="/admin/upload/uploadImage" method="post" name="article" enctype="multipart/form-data">
			<div class="form-group">
				<label for="title" class="col-md-2 control-label">文章标题</label>
				<div class="col-md-8">
					<input type="text" class="form-control" id="title" name="title" placeholder="请输入文章标题">
					{{csrf_field()}}
				</div>
			</div>
			
			
			<div class="form-group">
				<label for="file" class="col-md-2 control-label">附件</label>
				<div class="col-md-8">
					<input type="file" class="form-control" id="file" name="file"/>
				</div>
			</div>
			
			
			<div class="form-group">
				<div class="col-md-offset-2 col-md-10">
					<button type="submit" class="btn btn-default">新增</button>
					<button type="reset" class="btn btn-default">取消</button>
				</div>
			</div>
       </form>
       </div>
     </div>
   </div>
</body>
</html>

使用laravel要注意表单的跨域问题,在表单里写上{{csrf_field}} ,查看页面源码这实际上就是一个隐藏域,表单会带上_token;还需注意enctype不要遗漏或者写错,且表单提交方式为post

二  文件上传代码

无论框架如何变化文件上传也就是判断文件是否存在、是否有效、类型是否正确、转存文件这几个步骤,直接上代码

<?php

namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UploadController extends Controller
{
    public function toUpload(){
        return view("admin.upload.uploadImage");
    }
    /**文件上传操作方法
     * @param Request $request
     */
    public function uploadImage(Request $request){
        
        if($request->hasFile('file')&&$request->file('file')->isValid()){
            $file=$request->file('file');
            $allowed_extensions = ["png", "jpg", "gif"];
            if (!in_array($file->getClientOriginalExtension(), $allowed_extensions)) {
                dd('只能上传png,jpg和gif格式的图片.');
            }else{
                $destinationPath = 'storage/uploads/'; //public 文件夹下面建 storage/uploads 文件夹
                $extension = $file->getClientOriginalExtension();
                $fileName=md5(time().rand(1,1000)).'.'.$extension;
                $file->move($destinationPath,$fileName);
                $filePath = asset($destinationPath.$fileName);
                dd("文件路径:".asset($destinationPath.$fileName));
            }
        }else{
            dd('图片上传失败请重试.');
        }
    }
}

其中使用了助手函数asset,该函数返回一个网络URL地址,为了演示方便文件直接存到public/storage/uploads下,实际开发建议把上传的文件和项目分开,使用nginx等静态资源的方式读取和展示

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值