• 文件上传


     

    Ajax上传文件(原生JS篇)

          <div class='progress'>

            <div class="step"></div>

        </div>

        <form action="">

            <input type="text" name='name' placeholder="请输入姓名">

            <input type="text" name='skill' placeholder="请输入技能">

            <input type="file" name='icon'>

        </form>

    <input type="button" value='ajax2.0'>

     

          <style>

            .progress {

                300px;

                height: 20px;

                border: 1px solid hotpink;

                border-radius: 20px;

                overflow: hidden;

            }

            .step {

                height: 100%;

                0;

                background: greenyellow;

            }

        </style>

    javascript部分

    <script>

        //  如果我们要使用 ajax2.0 结合FormData 来提交数据 必须使用 post

        document.querySelector('input[type=button]').onclick = function () {

            //1.创建对象

            var xhr = new XMLHttpRequest();

            //2.设置请求行(get请求数据写在url后面)

            xhr.open('post', './saveFiles.php');

            //3.设置请求头(get请求可以省略,post不发送数据也可以省略)

            // 如果使用的时 formData可以不写 请求头 写了 无法正常上传文件

            //  xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

            //3.5注册回调函数

            xhr.onload = function () {

                console.log(xhr.responseText);

            }

            // XHR2.0新增 上传进度监控

            xhr.upload.onprogress = function (event) {

                //  console.log(event);

                var percent = event.loaded / event.total * 100 + '%';

                console.log(percent);

                // 设置 进度条内部step的 宽度

                document.querySelector('.step').style.width = percent;

            }

            // XHR2.0新增

            var data = new FormData(document.querySelector('form'));

            //4.请求主体发送(get请求为空,或者写null,post请求数据写在这里,如果没有数据,直接为空或者写null)

            xhr.send(data);

        }

    </script>

    PHP部分

    <?php    

    // 获取提交的文件信息

        print_r($_FILES);

     

     

        // 保存上传的数据

        move_uploaded_file($_FILES['icon']['tmp_name'],'./files/'.$_FILES['icon']['name']);

    ?>

    二、上传 ( 基于vue )

    1、页面使用 

     

    <input type="file" ref="upload" @change='handleUploadChange($event)' style="display:none;">

      handleUploadFile(row){ //  通过某一事件触发 

        this.$refs['upload'].click();

      },

     

     

       async handleUploadChange(e){ // 

          try{

            let res = await this.CommonUpload(e);

            if(res.code == '200'){ // 获取其他code值,根据后台来定

                this.handleProjectAddFile(res.data)

            }else{}

          }

        catch(err){}

      }

     

     

    2、方法封装 ( 只判断大小,也可通过accept判断要接收的类型 等其他类型 )

     

    CommonUpload(e){

            const files = e.target.files;

            let formData = new FormData();

            if(files && files[0]) {

                const file = files[0];

                if(file.size > 1024 * 1024 *3) {

                    alert('文件大小不能超过3M');

                    return;

                } else {

                    formData.append("multipartFile", file);

                }

            }

            this.uploadFile_(formData) // 为调用上传接口方法

        }

     

     

    3、问题 当再次选择同一文件时,失效

    解决: ( 上传后执行下面 )
    this.$refs['upload'].value = ''; // 解决 input file 第二次失效的问题

    原因:
    input file value值为新选中的值,所以下次再选同一文件,不会触发change事件

  • 相关阅读:
    找工过程中碰到的笔试面试题整理(1)
    windows核心编程学习笔记(五.续)堆
    windows核心编程学习笔记(二)Wait For Kernel Object(s)
    windows核心编程学习笔记(四)windows内存结构/虚拟内存/线程的堆栈
    [转]筛选法求素数
    windows核心编程学习笔记(五)内存映射文件
    windows核心编程学习笔记(八)结构化异常处理(Structured Exception Handling)
    [转]亲密接触VC6.0编译器
    windows核心编程学习笔记(三)线程池(Thread Pooling)
    windows核心编程学习笔记(七)DLL Injection and API Hooking
  • 原文地址:https://www.cnblogs.com/zwjun/p/12623309.html
Copyright © 2020-2023  润新知