如何使用jquery Ajax验证文件类型

时间:2018-05-01 02:19:35

标签: php jquery ajax

我刚刚开始使用网络编程。我需要验证并上传文件。当文件类型不匹配时我创建2个条件然后显示警报("无效文件")和第二个条件,当文件为空或匹配然后插入数据。但是当文件/图像类型为空时,无法插入数据。这个我的HTML代码基本如下:

<form method="post" id="insert_form" enctype="multipart/form-data">
  <label>Enter Employee Name</label>
  <input type="text" name="name" id="name" class="form-control" />
  <br />
  <label>Enter Employee Address</label>
  <textarea name="address" id="address" class="form-control"></textarea>
  <br />
  <label>Select Gender</label>
  <select name="gender" id="gender" class="form-control">
    <option value="Male">Male</option>
    <option value="Female">Female</option>
  </select>
  <br />
  <label>Enter Designation</label>
  <input type="text" name="designation" id="designation" class="form-control" />
  <br />
  <label>Enter Age</label>
  <input type="text" name="age" id="age" class="form-control" />
  <br />
  <label>File</label>
  <br>
  <div>
    <img src="" id="pict" width="100px" class="img-thumbna">
  </div>
  <br>
  <input type="file" name="image" id="image">
  <br/>
  <input type="hidden" name="employee_id" id="employee_id" />
  <input type="submit" name="insert" id="insert" value="Insert" class="btn btn-success" />
</form>

我的验证码:

function listMajors(auth) {
  const sheets = google.sheets({ version: 'v4', auth });
  sheets.spreadsheets.values.get({
    spreadsheetId: '1S5SDKN0t7jsiL_7LVPdpDWWay1_0Bv5LOAO9EaTw_8M',
    range: 'Sheet1!A:A',
  }, (err, { data }) => {
    if (err) return console.log('The API returned an error: ' + err);
    const rows = data.values;
    if (rows.length) {
      // console.log('Name, Major:');
      // Print columns A and E, which correspond to indices 0 and 4.
      rows.map((row) => {
        // console.log(`${row[0]}, ${row[4]}`);
      })
    } else {
      console.log('No data found.');
    }
  });
}

$("#insert_form").on('submit', function (event) {
  event.preventDefault();
  var exten = $("#image").val().split('.').pop().toLowerCase();

  if ($("#name").val() == "") {
    alert('name is required');
  }
  else if (jQuery.inArray(exten, ['jpg', 'jpeg']) == -1) {
    alert("Invalid File");
  }
  else {
    $.ajax({
      url: 'insert.php',
      method: 'POST',
      data: new FormData(this),
      contentType: false,
      processData: false,

      beforeSend: function () {
        $("#insert").val('Inserting....');
      },
      success: function (data) {
        $("#add_data_Modal").modal('hide');
        $("#insert_form")[0].reset();
        $("#employee_table").html(data);
      }
    });

  }
});
你可以帮我解决这个问题吗

2 个答案:

答案 0 :(得分:1)

this.files是所选文件中的数组。

this.files[0].type.split('/')[1]获取文件的类型并使用/拆分字符串。该文件的类型类似于image/jpgimage/pngtext/plain等。

因此,您可以检查类型是否在有效的扩展数组中。

这是一个简单的演示。

&#13;
&#13;
let validExt = ['jpg', 'jpeg']

$('input').on('change', function(){
  var extension = this.files[0].type.split('/')[1]
  console.log(this.files[0].type)
  if(validExt.indexOf(extension) == -1){
    alert('Invalid file.')
  }
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file">
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您需要对脚本进行少许更改

$("#insert_form").on('submit', function (event) {
    event.preventDefault();
    formData = new FormData($(this)[0]);//This will contain your form data
    var exten = $("#image").val().split('.').pop().toLowerCase();
    if ($("#name").val() == "") {
        alert('name is required');
    }
    else if (jQuery.inArray(exten, ['jpg', 'jpeg']) == -1) {
        alert("Invalid File");
    }
    else {
        $.ajax({
            url: 'insert.php',
            method: 'POST',
            data: formData,
            cache: false,// add this line too
            contentType: false,
            processData: false,
            beforeSend: function () {
                $("#insert").val('Inserting....');
            },
            success: function (data) {
                $("#add_data_Modal").modal('hide');
                $("#insert_form")[0].reset();
                $("#employee_table").html(data);
            }
        });
    }
});