欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ajax 文件上传

程序员文章站 2022-03-11 21:49:24
...

要给文件上传<form>标签添加enctype="multipart/form-data"属性,php页面才能接到数据。

$("form").serialize()和 new FormData($('#uploadForm')[0])都是序列化表单,实现表单的异步提交,但是二者有区别
首先,前者,只能序列化表单中的数据 ,比如文本框等input  select等的数据,但是对于文件,比如文件上传,无法实现,那么这时候,FormData就上场了,FormData 对象,可以把form中所有表单元素的name与value组成一个queryString,提交到后台。在使用Ajax提交时,使用FormData对象可以减少拼接queryString的工作量。FormData对象,是可以使用一系列的键值对来模拟一个完整的表单
new FormData使用需要有一个注意点,
注意点一:,对于jquery的要求是,好像是 版本1.8及其以上方可支持。
另外该对象不仅仅可以序列化文件,一样可以用作表单数据的序列化,(就是说包含了serialize()的功能);
注意点二:(js中配置)
processData: false, contentType: false,缺少这二者的设置,将会出现  红色部分的错误提示,提交失败。(ajax传值的时候设置二者)

processData设置为false。因为data值是FormData对象,不需要对数据做处理。
cache设置为false,上传文件不需要缓存。
contentType设置为false。因为是由<form>表单构造的FormData对象,且已经声明了属性enctype="multipart/form-data",所以这里设置为false。

//坑点: 无论怎么传数据,console.log(formData)都会显示为空,但其实值是存在的,f12查看Net tab可以看到数据被上传了


1、创建表单

<form enctype="multipart/form-data" id="upForm">
    <input type="file" name="file" ><br><br>
    <input type="button" value="文件上传" class="button">
</form>
<div class="picDis">
    <img src="" alt="">
</div>

2、ajax传值

<script>
    //js代码
    $ ('.button').click(function(event) {
        //formdata储存异步上传数据
        var formData = new FormData($('form')[0]);
        formData.append('file',$(':file')[0].files[0]);
        //坑点: 无论怎么传数据,console.log(formData)都会显示为空,但其实值是存在的,f12查看Net tab可以看到数据被上传了
        $.ajax({
            url:'formtest.php',
            type: 'POST',
            data: formData,
            //这两个设置项必填
            contentType: false,
            processData: false,
            success:function(data){
                console.log(data)
                var srcPath = data;
                console.log();
                //注意这里的路径要根据自己的储存文件的路径设置
                $('.picDis img').attr('src',srcPath);
            }
        })
    });
</script>

3、接值处理文件上传的数据

$upFile = $_FILES['file'];
/**
 * 创建文件夹函数,用于创建保存文件的文件夹
 * @param str $dirPath 文件夹名称
 * @return str $dirPath 文件夹名称
 */
function creaDir($dirPath){
    $curPath = dirname(__FILE__);
    $path = $curPath.'\\'.$dirPath;
    if (is_dir($path) || mkdir($path,0777,true)) {
        return $dirPath;
    }
}

//判断文件是否为空或者出错
if ($upFile['error']==0 && !empty($upFile)) {
    //同级文件夹中的uoload
    $dirpath = creaDir('./upload');
//    print_r($dirpath);exit;
    $filename = $_FILES['file']['name'];
    //图片信息为同级文件下的路径+图片名称
    $queryPath = './'.$dirpath.'/'.$filename;
//    print_r($queryPath);exit;
    //move_uploaded_file将浏览器缓存file转移到服务器文件夹
    if(move_uploaded_file($_FILES['file']['tmp_name'],$queryPath)){
        echo $queryPath;
    }
}
ajax 文件上传





相关标签: 文件上传