zoukankan      html  css  js  c++  java
  • PHP Filesystem上传文件的使用

    Filesystem 函数允许您访问和操作文件系统。Filesystem 函数是 PHP 核心的组成部分,无需安装即可使用这些函数。下面是使用例子:

    前端部分,这里我使用ajax上传文件的

    <form id="contact-form"  method="post">
        <div class="row">
            <div class="col-md-12">
                <input type="text" name="title" id="res_title" placeholder="標題">
            </div>
            <div class="col-md-6">
                <input type="text" name="name" id="res_name" placeholder="姓名">
            </div>
            <div class="col-md-6">
                <input type="text" name="phone" id="res_phone" placeholder="電話">
            </div>
            <div class="col-md-12">
                <textarea name="content" cols="30" rows="10" placeholder="留言內容"></textarea>
                <input type="hidden" name="cate_id" value="{$cate.id}">
                <input type="file" id="file" name="file" class="button-default"/>
                <button type="button" class="button-default res_button">提交</button>
            </div>
        </div>
    </form>
    
    
    <script>
        $.fn.serializeFiles = function() {
            var form = $(this),formData = new FormData();//通过FormData构造函数创建一个空对象
            var formParams = form.serializeArray();//带有name和value的json,比如{name: "username1", value: "a"}
    
            //通过append()方法来追加数据,type="file"
            $.each(form.find('input[type="file"]'), function(i, tag) {
                $.each($(tag)[0].files, function(i, file) {
                    formData.append(tag.name, file);
                });
            });
    
            //通过append()方法来追加数据,type="text"
            $.each(formParams, function(i, val) {
                formData.append(val.name, val.value);
            });
    
            return formData;
        };
    
    
        //提交留言
        $(".res_button").click(function () {
            var name = $("#res_name").val();
            var phone = $("#res_phone").val();
            var title = $("#res_title").val();
            if (!title) {
                layer.msg("標題,不能為空!");
                return;
            }
            if (!name) {
                layer.msg("名稱,不能為空!");
                return;
            }
            if (!phone) {
                layer.msg("電話,不能為空!");
                return;
            }
            var formData= $("#contact-form").serializeFiles();
    
            $.ajax({
                url:"{:url('index/pay_upload')}",
                processData : false, // 使数据不做处理
                contentType : false, // 不要设置Content-Type请求头
                type:"POST",
                data:formData,
                success:function (res) {
                    if (res.code == 200) {
                        layer.msg("Success!!",{icon:1,time:2000,end:function(){
                                window.location.reload();
                            }})
                    }
                }
            })
    
        })
    </script>

    app/common.php

    function uploadFile($file, $dir){
    
        // 使用验证器验证上传的文件
    //    validate(['file' => [
    //        // 限制文件大小(单位b),这里限制为4M
    //        'fileSize' => 4 * 1024 * 1024,
    //        // 限制文件后缀,多个后缀以英文逗号分割
    //        'fileExt'  => 'gif,jpg,png'
    //        // 更多规则请看“上传验证”的规则,文档地址https://www.kancloud.cn/manual/thinkphp6_0/1037629#_444
    //    ]])->check(['file' => $file]);
    
        // 文件名规则,默认是当前时间。可以使用哈希算法,如:md5,sha1等。还可以传入匿名函数
        $rule = 'date()';
        // 将文件保存public磁盘,文件名为$rule指定的规则。然后将文件路径赋值给$path
        $path = 	hinkfacadeFilesystem::disk('public')->putFile($dir, $file);
        // 拼接URL路径
        $url = 	hinkfacadeFilesystem::getDiskConfig('public', 'url') . '/' . str_replace('\', '/', $path);
        $save_path = 	hinkfacadeFilesystem::getDiskConfig('public', 'root') . '/' . str_replace('\', '/', $path);
    
        $url_arr = explode('/', $url );
    
        $info = [
            'save_path' => str_replace('\', '/', $save_path),
            // URL路径
            'url'  => str_replace('\', '/', $url),
            // 文件大小(字节)
            'size' => $file->getSize(),
            // 文件名
            'save_name' => $url_arr[count($url_arr)-1],
            'original_name' => $file->getOriginalName(),
            // 文件MINE:image/jpeg
            'mine' => $file->getMime(),
            //文件扩展名
            'extension' => $file->getOriginalExtension(),
        ];
    
        return $info;
    }

    控制器:

    //付款上载
    public function pay_upload(){
        $param = $this->request->param();
    
        if ($_FILES) {
                // 上传文件错误或者文件验证不通过时,都会抛出异常,所以要使用try来捕捉异常
                try {
                    // 获取上传的文件,如果有上传错误,会抛出异常
                    $file = 	hinkfacadeRequest::file('file');
    
                    // 如果上传的文件为null,手动抛出一个异常,统一处理异常
                    if (null === $file) {
                        // 异常代码使用UPLOAD_ERR_NO_FILE常量,方便需要进一步处理异常时使用
                        throw new Exception('请上传文件', UPLOAD_ERR_NO_FILE);
                    }
    
                    $fileinfo = uploadFile($file, 'payUpload');
    
                    if ($fileinfo) {
                        $param['file_name'] = $fileinfo['original_name'];
                        $param['save_name'] = $fileinfo['save_name'];
                        $param['file_ext'] = $fileinfo['extension'];
                        $param['file_mime_type'] = $fileinfo['mine'];
                        $param['file_size'] = $fileinfo['size'];
                        $param['url'] = $fileinfo['url'];
                        $param['save_path'] = $fileinfo['save_path'];
                    }
                    $param['create_time'] = time();
                    $res = Payupload::insert($param);
                    if ($res) {
                        return json(['code' => 200]);
                    } else{
                        return json(['code' => 0]);
                    }
    
                } catch (Exception $e) {
                    // 如果上传时有异常,会执行这里的代码,可以在这里处理异常
                    return json([
                        'code' => 1,
                        'msg' => $e->getMessage(),
                    ]);
                }
            }
    
            else{
                return json(['code' => 0]);
            }
    
    }

    全局设置保存文件的路劲:

    ThinkPHP6.0:https://www.kancloud.cn/monday/thinkphp6/1482307
  • 相关阅读:
    datetime格式化 c#
    Cookie aps.net
    缓存页面 asp.net
    aps.net IIS 部署 显示404.3错误
    使用systemd管理进程,设置进程自动启动
    VS Code 生成Pack、在Nuget中添加包、在项目中添加包
    dotnet命令 new
    WPF ListView渲染性能优化
    SQL Server判断语句(IF ELSE/CASE WHEN )
    T-SQL脚本附加数据库
  • 原文地址:https://www.cnblogs.com/bushui/p/14092498.html
Copyright © 2011-2022 走看看