ajax异步上传文件

在使用form表单上传图片或者其他文件的时候,如果采用默认提交方式往往不是异步的(页面刷新),这不是我们想要的效果。如果您跟我一样,想采用异步提交的方式,那么请看下面的“小栗子”。

file.html代码部分
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>file upload test page</title>
</head>
<body>
    <form id="msg" enctype="multipart/form-data"><!--注意:enctype属性不能少-->
        <input type="file" name="file"><br>
        <input type="submit" id="submit">
    </form>
    <script src="http://apps.bdimg.com/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="../js/file.js"></script>
</body></html>
file.js代码部分
$(function () {
    uploadFileEvent();
    function uploadFileEvent() {
        var sub = $('#submit');
        sub.click(function (e) {
            var datas = new FormData($('#msg')[0]);
            e.preventDefault();
            $.ajax({
                type: 'post',
                url: '../../admin/file.php',//请求地址
                cache: false,
                data: datas,
                processData: false, //特别注意这个属性不能省
                contentType: false, //特别注意这个属性不能省
                dataType: 'json',
                success: function (res) {
                    alert(res.msg);
                    if (res.status == 1){
                        $('#msg')[0].reset();//上传成功时,重置form表单
                    }
                }
            })
        })
    }
});
file.php代码部分
<?php
header('Content-type:text/html;charset=utf-8');
if ($_FILES['file']) {
    $file = $_FILES['file'];//获取上传文件的全部信息

    $name = $file['name'];//获取上传文件的名称
    $type = $file['type'];//获取上传文件的类型
    $size = $file['size'];//获取上传文件的大小
    $tmpName = $file['tmp_name'];//获取上传文件的临时存储目录

    //file_exists(path)能够判断path路径下是否存在xx文件
    if (file_exists('../sources/' . $name)) {
        $msg = ['msg' => '已存在该文件名相同的文件。', 'status' => 0];
        responseEvent($msg);
    } else {
        //move_uploaded_file(tmpPath, targetPath)方法能够将tmpPath路径下的文件移到targetPath路径下(同时修改文件名)
        move_uploaded_file($tmpName, '../sources/' . $name);
        $msg = ['msg' => '上传成功。', 'status' => 1];
        responseEvent($msg);//向前端返回处理结果集合
    }
}
function responseEvent($msg)
{
    echo json_encode($msg);//返回json字符串
    exit();
}

上面的例子只是一个简单的上传文件方法,实际开发当中往往需要做很多的安全校验,比如限制文件类型,大小,以及上传文件的操作权限等等。这里仅作为前端小白学习后台异步上传文件操作参考案例。

欢迎点赞,谢谢关注:)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Ajax异步上传实现文件上传的示例代码: HTML代码: ```html <form id="uploadForm" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit">上传</button> </form> ``` JavaScript代码: ```javascript // 获取表单元素和文件输入框 var form = document.getElementById('uploadForm'); var fileInput = form.querySelector('input[type="file"]'); // 监听表单提交事件 form.addEventListener('submit', function(event) { // 阻止表单默认提交事件 event.preventDefault(); // 创建FormData对象,将文件内容打包 var formData = new FormData(); formData.append('file', fileInput.files[0]); // 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 监听上传进度事件 xhr.upload.addEventListener('progress', function(event) { if (event.lengthComputable) { // 计算上传进度百分比 var percent = Math.round((event.loaded / event.total) * 100); console.log('上传进度:' + percent + '%'); } }); // 监听上传完成事件 xhr.addEventListener('load', function(event) { console.log('上传完成'); }); // 监听上传错误事件 xhr.addEventListener('error', function(event) { console.log('上传出错'); }); // 发送Ajax请求,上传文件 xhr.open('POST', '/upload', true); xhr.send(formData); }); ``` 在上面的示例代码中,我们首先获取表单元素和文件输入框,然后监听表单提交事件,在事件处理函数中创建FormData对象,将文件内容打包后发送到服务器端。在创建XMLHttpRequest对象后,我们还监听了上传进度、上传完成和上传错误等事件,以便及时获取上传状态。最后,我们打开POST请求并发送FormData对象,实现了文件的异步上传。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值