zoukankan      html  css  js  c++  java
  • ThinkPHP+JQuery实现文件的异步上传

    前端代码

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title>ThinkPHP+JQuery实现文件的异步上传</title>
    </head>
    <body>
    
    <form id="ajax-upload-demo" enctype="multipart/form-data">
        <label>选择文件:</label>
        <input type="file" name="image"><br><br>
        <a href="javascript:uploadFile();">上传</a>
    </form>
    <br><p id="tips"></p>
    
    <script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
    <script>
    
        var isUploading = false;
    
        // 上传文件
        function uploadFile(){
            var form = document.getElementById('ajax-upload-demo');
            if(isUploading) {
                alert('文件正在上传...');
                return false;
            }
            $.ajax({
                url: '/index/index/uploadApi',
                type: 'POST',
                cache: false,
                data: new FormData(form),
                processData: false,
                contentType: false,
                dataType: 'json',
                beforeSend: function () {
                    isUploading = true;
                },
                success: function (json) {
                    var arr = JSON.parse(json);
                    if(arr.errcode == 10000){
                        // 上传成功
                        alert('上传成功');
                        var url = arr.data.url;
                        var tips = "<a href='" + url + "' target='_blank'>点击查看</a>";
                        $("#tips").empty().append(tips);
    
                    }else{
                        // 上传失败
                        alert('上传失败');
                    }
                    isUploading = false;
                }
            });
        }
    </script>
    </body>
    </html>
    
    

    效果图:

    PHP代码

    <?php
    namespace appindexcontroller;
    
    use thinkController;
    
    class Index extends Controller
    {
        // 上传表单页面
        public function index()
        {
            return $this->fetch();
        }
    
        // 上传文件接口
        public function uploadApi(){
            // 获取文件
            $file = request()->file('image');
            if($file){
                // 校验数组
                $validateArr = [ 'ext' => 'jpg,jpeg,gif,png,bmp' ];
                // 文件的本地存储路径
                $path = ROOT_PATH . 'public' . DS . 'upload';
                // 校验并移动
                $info = $file->validate($validateArr)->move($path);
                // 检查移动结果
                if($info){
                    // 上传成功
    
                    // 输出 jpg
                    #echo $info->getExtension();
    
                    // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
                    #echo $info->getSaveName();
    
                    // 输出 42a79759f284b767dfcb2a0197904287.jpg
                    #echo $info->getFilename();
    
                    // 文件的原文件名
                    $sourceInfo = $info->getInfo();
                    $sourceName = $sourceInfo['name'];
    
                    // 拼装url
                    $url = '/upload/'.$info->getSaveName();
                    $url = str_replace('\', '/', $url); // Windows下替换路径分隔符
    
                    // other some operations ...
    
                    // 返回json,告知客户端上传结果
                    $json = json_encode([
                        'errcode'   => '10000',
                        'errmsg'    => 'Upload success',
                        'data'      => [ 'url' => $url ]
                    ]);
                }else{
                    // 上传失败,返回json,告知客户端
                    $json = json_encode([
                        'errcode'   => '20002',
                        'errmsg'    => 'Upload failed',
                    ]);
                }
            }else{
                // 未上传文件
                $json = json_encode([
                    'errcode'   => '20001',
                    'errmsg'    => 'File not uploaded',
                ]);
            }
            return $json;
        }
    }
    
    

    上传测试

    1. 上传一张图片

    2. 上传成功

    3. 点击查看

    4. 查看图片

    5. 查看上传目录

    可能出现的错误

    1. PHP的上传限制

    解决方法
    打开PHP的配置文件php.ini

    1. 查找max_execution_time,修改其值为60或更大
    2. 查找post_max_zise,修改其值为128M或更大
    3. 查找upload_max_filesize,修改其值为128M或更大

    原因

    1. max_execution_time指的是一次请求最长的执行秒数。如果上传文件过大,则可能服务端还没有接收完文件就结束程序了;
    2. post_max_size指的是POST数据所允许的最大大小;
    3. upload_max_filesize指的是上传文件的最大大小。

    本文链接:https://www.cnblogs.com/connect/p/thinkphp-ajax-upload.html

  • 相关阅读:
    SqlParameter的作用与用法
    自制ASP.NET 本地授权文件
    教你如何谷歌浏览器免费打电话
    grep命令
    前端培训
    环境变量
    jenkins执行脚本npm: command not found解决
    Linux下给mysql创建用户并分配权限
    h5视频微信禁止全屏 x5-playsinline
    git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚
  • 原文地址:https://www.cnblogs.com/connect/p/thinkphp-ajax-upload.html
Copyright © 2011-2022 走看看