VeeValidate (vue.js) проверка размера и размеров файла изображения

Как установить проверку в такой форме, используя vee validate в vue.js

  • Размер изображения менее 500 * 500 пикселей

  • Размер изображения менее 100 КБ


person Hasan Hafiz Pasha    schedule 19.03.2018    source источник


Ответы (1)


Для двух из этих требований существуют доступные («собственные») правила:

Теперь для

  • Размер изображения меньше 500 * 500 пикселей.

... проблема в less.

dimensions rule тест на < strong> точный размер. Поэтому вам нужно настроить его, чтобы проверить размер меньше или равный размеру.

Простым решением было бы взять код из официальная реализация dimensions правила и измените его на проверку на меньше или равно.

Это то, что делает демонстрация ниже. Он создается как maxdimensions:500,500 правило.

Vue.use(VeeValidate);

// based on https://github.com/baianat/vee-validate/blob/2.0.6/src/rules/dimensions.js
// and https://github.com/baianat/vee-validate/blob/2.0.6/locale/en.js#L18
const maxDimensionsRule = {
  getMessage(field, [width, height], data) {
      return (data && data.message) || `The ${field} field must be UP TO ${width} pixels by ${height} pixels.`;
  },
  validate(files, [width, height]) {
    const validateImage = (file, width, height) => {
    const URL = window.URL || window.webkitURL;
      return new Promise(resolve => {
        const image = new Image();
        image.onerror = () => resolve({ valid: false });
        image.onload = () => resolve({
          valid: image.width <= Number(width) && image.height <= Number(height) // only change from official rule
        });

        image.src = URL.createObjectURL(file);
      });
    };
    const list = [];
    for (let i = 0; i < files.length; i++) {
      // if file is not an image, reject.
      if (! /\.(jpg|svg|jpeg|png|bmp|gif)$/i.test(files[i].name)) {
        return false;
      }
      list.push(files[i]);
    }
    return Promise.all(list.map(file => validateImage(file, width, height)));
  }
};


new Vue({
  el: '#app',
  created() {
    this.$validator.extend('maxdimensions', maxDimensionsRule);
  }
})
<script src="https://unpkg.com/vue"></script>
<script src="https://cdn.jsdelivr.net/npm/vee-validate@latest/dist/vee-validate.js"></script>


<div id="app">
   <form role="form" class="row">      
        My File: <input name="My File" v-validate data-vv-rules="image|maxdimensions:500,500|size:100" type="file"><br>
        <span v-if="errors.has('My File')">{{ errors.first('My File') }}</span>
    </form>
</div>

person acdcjunior    schedule 20.03.2018
comment
Большое спасибо за Вашу помощь. Это работает правильно - person Hasan Hafiz Pasha; 20.03.2018
comment
Можете ли вы посмотреть здесь вопрос, связанный с vee-validate: stackoverflow.com/questions/59444033/? - person Istiaque Ahmed; 22.12.2019