iview 单图上传

213 阅读1分钟
//单图上传
https://run.iviewui.com/HDiaX8K0

//表格单行数据编辑
https://run.iviewui.com/50ahQHrs

<style>

  input[type="file"]{

    position: absolute;

    top: -500px;

  }

  div.file-listing img{

    max-width: 90%;

  }

</style>

<template>

  <div class="container">

    <div class="large-12 medium-12 small-12 cell">

      <label>Files

        <input type="file" id="files" ref="files" accept="image/*" multiple v-on:change="handleFilesUpload()"/>

      </label>

    </div>

    <div class="large-12 medium-12 small-12 cell">

      <div class="grid-x">

        <div v-for="(file, key) in files" class="large-4 medium-4 small-6 cell file-listing">

          {{ file.name }}

          <img class="preview" v-bind:ref="'image'+parseInt( key )"/>

        </div>

      </div>

    </div>

    <br>

    <div class="large-12 medium-12 small-12 cell clear">

      <button v-on:click="addFiles()">Add Files</button>

    </div>

    <br>

    <div class="large-12 medium-12 small-12 cell">

      <button v-on:click="submitFiles()">Submit</button>

    </div>

  </div>

</template>

<script>

  export default {

    data(){

      return {

        files: []

      }

    },

    methods: {

      addFiles(){

        this.$refs.files.click();

      },

      submitFiles(){

        let formData = new FormData();

        for( var i = 0; i < this.files.length; i++ ){

          let file = this.files[i];

          formData.append('files[' + i + ']', file);

        }

        axios.post( '/file-multiple-preview',

          formData,

          {

            headers: {

                'Content-Type': 'multipart/form-data'

            }

          }

        ).then(function(){

          console.log('SUCCESS!!');

        })

        .catch(function(){

          console.log('FAILURE!!');

        });

      },   

      handleFilesUpload(){     

        let uploadedFiles = this.$refs.files.files;     

        for( var i = 0; i < uploadedFiles.length; i++ ){

          this.files.push( uploadedFiles[i] );

        }     

        this.getImagePreviews();

      },     

      getImagePreviews(){     

        for( let i = 0; i < this.files.length; i++ ){       

          if ( /\.(jpe?g|png|gif)$/i.test( this.files[i].name ) ) {         

            let reader = new FileReader();

            reader.addEventListener("load", function(){

              this.$refs['image'+parseInt( i )][0].src = reader.result;

            }.bind(this), false);

            reader.readAsDataURL( this.files[i] );

          }

        }

      }

    }

  }

</script>