• 通过fromdata实现上传文件


    其实呢,文件上传的插件很多,可是现在做的东西要求尽量少用插件,所以就自己写了一下。

    之前也用node写过对文件处理方面的东西,这次用php写着试一下。

    a.html文件

    <!DOCTYPE html>  
    <html xmlns="http://www.w3.org/1999/html">  
    <head>  
        <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <html>  
    <head>  
    <title></title>  
    
    </head>  
      
    <body>  
    <form enctype="multipart/form-data" id="uploadImg">
        上传文件:  
        <input name="file" type="file" id="file"> 
    </form>
    </body>  
    </html>
    <script src="jquery.js"></script>
    <script>
        $(function(){
            $('input[type="file"]').on('change', function(){
                var file = this.files[0];
                var formData = new FormData($('#uploadImg')[0]);
                formData.append('file', file);
                console.log(formData.get('file'))
                $.ajax({
                    url: 'b.php',
                    type: 'POST',
                    cache: false,
                    data: formData,
                    //dataType: 'json',
                    //async: false,
                    processData: false,
                    contentType: false,
                }).done(function(res) {
                    console.log(res)
                }).fail(function(res) {
                    console.log(res)
                });
            });
        })
    </script>  

    b.php文件:

    <?php
        //print_r($_FILES);    
        $uptypes=array(  
            'image/jpg',  
            'image/jpeg',  
            'image/png',  
            'image/pjpeg',  
            'image/gif',  
            'image/bmp',  
            'image/x-png'  
        );
    
        $max_file_size=200000000;     //上传文件大小限制, 单位BYTE
        
        $file=$_FILES["file"];
        $fileName=$file["name"];
        $filetype = $file["type"];
        $filesize = $file["size"];
        
        if(!in_array($filetype, $uptypes)){            // 文件类型判断
            echo "文件类型不符!";
            exit;
        }
        if($filesize > $max_file_size){                // 文件大小判断
            echo "文件太大!";
            exit;    
        }
        
        if (!is_dir("image/")) {                    //创建路径
            mkdir("image/");
        }
        $url = "image/";
        //当文件存在
        if (file_exists($url.$fileName)) {
            //echo $fileName." already exists.";
            echo $url.$fileName;
        }else{//当文件不存在
            $url=$url.$fileName;
            move_uploaded_file($_FILES["file"]["tmp_name"],$url);
            echo $url;
        }
    ?>

    在这当中也遇到了几个问题

    1.在PHP中通过print_r($_FILES)打印时,有时候formData里面的参数type会为空,而在前端打印的formData.get('file')里是有type的值的,原因是PHP导入文件(我是导的图片)有大小限制

    解决方法:在php.ini中,搜索upload_max_filesize(默认为2M),修改这个值,重启服务器即可。

    2:在通过ajax进行数据请求时,console.log(formData)对象为空,而且在append后还是为空,是因为属性不是直接挂载在你这个FormData,可以通过get方法进行获取。

    参考:https://segmentfault.com/q/1010000010087308

    3:在一般情况下使用ajax请求,processData(默认为true)不需要设置,但是当使用fromdata上传文件时,发送的对象不需要转化为对象,所以必须设置为true。

  • 相关阅读:
    四月十五号日报
    四月十一号日报
    四月八号日报
    五月六号日报
    CCSUOJ评测系统——第四次scrum冲刺
    CCSUOJ评测系统——第三次scrum冲刺
    CCSUOJ评测系统——第二次scrum冲刺
    C# Process 进程管理
    [C#][收集整理]
    [C#][收集整理]
  • 原文地址:https://www.cnblogs.com/sk-3/p/8194903.html
Copyright © 2020-2023  润新知