zoukankan      html  css  js  c++  java
  • 文件上传

     

    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事件

  • 相关阅读:
    升级windows 11小工具
    windows 10更新升级方法
    您需要了解的有关 Oracle 数据库修补的所有信息
    Step by Step Apply Rolling PSU Patch In Oracle Database 12c RAC Environment
    Upgrade Oracle Database Manually from 12.2.0.1 to 19c
    如何应用版本更新 12.2.0.1.210420(补丁 32507738 – 2021 年 4 月 RU)
    xtrabackup 安装、备份和恢复
    Centos_Lvm expand capacity without restarting CentOS
    Centos_Lvm_Create pv vg lv and mount
    通过全备+relaylog同步恢复被drop的库或表
  • 原文地址:https://www.cnblogs.com/zwjun/p/12623309.html
Copyright © 2011-2022 走看看