• laravel 文件上传


    laravel version: 5.4.*

    1. 配置文件上传的目录位置

    php artisan storage:link
    
    • 执行这个命令之后,会在 /public 目录下创建一个 storage 文件夹
    • 所有文件相关的配置都在 /config/filesystem.php 这个配置文件中, 你也可以手动配置

    2. 配置路由

    Route::get('/upload',  'UploadController@index');
    Route::post('/upload', 'UploadController@uploadFile');
    

    3. 前端模板

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Laravel Upload File</title>
    </head>
    <body>
        <!-- 上传文件必须加: enctype="multipart/form-data" -->
        <form action="/upload" method="post" enctype="multipart/form-data">
            {{csrf_field()}}
            <input type="file" name="img">
            <button type="submit">提交</button>
        </form>
    </body>
    </html>
    

    4.控制器

    <?php
    
    namespace AppHttpControllers;
    
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    use IlluminateSupportFacadesStorage;
    
    
    class UploadController extends Controller {
        /**
         * 展示文件上传表单页面
         */
        public function index() {
            return view("test");
        }
    
        /**
         * 文件上传
         */
        public function uploadFile(Request $request) {
            $file = $request->file('img');
            // 此时 $this->upload如果成功就返回文件名不成功返回false
            $fileName = $this->upload($file);
            if ($fileName){
                return $fileName;
            }
            return '上传失败';
        }
    
        /**
         * 验证文件是否合法
         */
        public function upload($file, $disk='public') {
            // 1.是否上传成功
            if (! $file->isValid()) {
               return false;
            }
    
            // 2.是否符合文件类型 getClientOriginalExtension 获得文件后缀名
            $fileExtension = $file->getClientOriginalExtension();
            if(! in_array($fileExtension, ['png', 'jpg', 'gif'])) {
                return false;
            }
    
            // 3.判断大小是否符合 2M
            $tmpFile = $file->getRealPath();
            if (filesize($tmpFile) >= 2048000) {
                return false;
            }
    
            // 4.是否是通过http请求表单提交的文件
            if (! is_uploaded_file($tmpFile)) {
                return false;
            }
    
            // 5.每天一个文件夹,分开存储, 生成一个随机文件名
            $fileName = date('Y_m_d').'/'.md5(time()) .mt_rand(0,9999).'.'. $fileExtension;
            if (Storage::disk($disk)->put($fileName, file_get_contents($tmpFile)) ){
                return Storage::url($fileName);
            }
        }
    }
    
  • 相关阅读:
    MOSS 2010:Visual Studio 2010开发体验(16)——客户端对象模型
    MOSS 2010:Visual Studio 2010开发体验(15)——LINQ to SharePoint
    文字中间加横线效果
    android 滑动加载数据
    使用scrollview不让键盘覆盖编辑框
    java数据结构分析
    android listview onitemclick
    Android通过Intent发送电子邮件含附件
    简易的按钮事件
    使用google chart生成动态图
  • 原文地址:https://www.cnblogs.com/liaohui5/p/10581641.html
Copyright © 2020-2023  润新知