• 三 文件上传片段


    异步:ajax                         需要借助于ajax来实现目标的效果(无刷新)

    插件:webuploader(基于jQuery开发,百度公司开发)

    官网:https://fex.baidu.com/webuploader/

    配置文件上传的目录位置

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

    配置路由

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

    前端模板

    <!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>

    控制器

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Storage;
    
    
    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);
            }
        }
    }
  • 相关阅读:
    学习使用linux下tags文件
    uboot常用命令详解
    U-boot中TFTP 解释
    eth0: ERROR while getting interface flags: No such device 没有eth0 有其他的eth
    取消挂载 umount 时出现的 “Device is busy”
    Linux的log日志功能
    oracle的安装
    SOA架构设计分析
    立方体模型
    质量属性的六个常见属性场景(淘宝网)
  • 原文地址:https://www.cnblogs.com/linzenews/p/12578255.html
Copyright © 2020-2023  润新知