亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS+php后臺實現文件上傳功能詳解

 更新時間:2019年03月02日 10:40:14   作者:huangpb0624  
這篇文章主要介紹了JS+php后臺實現文件上傳功能,結合實例形式分析了javascript前臺表單數據提交與后臺php文件傳輸處理相關操作技巧,需要的朋友可以參考下

本文實例講述了JS+php后臺實現文件上傳功能。分享給大家供大家參考,具體如下:

一、利用 FormData 對象形式上傳

FormData 是 XMLHttpRequest 2 的產物,兼容 IE10+。

FormData 對象,可以把form中所有表單元素的name與value組成一個queryString,提交到后臺。在使用Ajax提交時,使用FormData對象可以減少拼接queryString的工作量。

使用 FormData 對象

1.取得form對象,作為參數傳入到FormData對象

html:

<form name="form1" id="form1">
   <input type="text" name="name" value="fdipzone">
   <input type="text" name="gender" value="male">
</form>

js:

var form = document.getElementById('form1');
var formdata = new FormData(form);

2.創(chuàng)建一個FormData空對象,然后使用append方法添加key/value

var formdata = new FormData();
formdata.append('name','fdipzone');
formdata.append('gender','male');

使用FormData提交表單及上傳文件實例:

實例1

一般項目中使用的點擊上傳文件的按鈕跟 <input type="file"/> 默認樣式是不一樣的,我們得自定義。方法是,自己寫一個<button> 按鈕,然后再寫一個 <input type="file"/>(這個要隱藏,太難看),點擊 <button> 的時候出發(fā) <input type="file"/> 的 click 事件。

HTML:

<input type="file"
    :style="{display: 'none'}"
    ref="input" @change="selectedFile"
/>
<button @click="upload">上傳</button>

JS:

methods: {
  triggerSelect () {
   this.$refs.input.click()
  },
  selectedFile (e) {
   console.log(e.target.files[0])
   //根據項目需求做具體處理,比如說獲取文件名
  },
  async upload () {
   //如果不需要用到上傳后的返回值可以把 async...await 語法去掉
   let files = this.$refs.input.files;
   if(files.length > 0) {
    let form = new FormData();
    form.append('file', files[0])
    let data = await new Promise((resolve, reject) => {
      axios({
       url: '',
       method: 'post',
       data: form
      })
       .then(res => {
        resolve(res)
       })
       .catch(err => {
        reject(err)
       })
     })
   }
  }
}

實例2

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <title> FormData Demo </title>
 </head>
 <body>
  <form name="form1" id="form1">
    <p>name:<input type="text" name="name" ></p>
    <p>gender:<input type="radio" name="gender" value="1">male <input type="radio" name="gender" value="2">female</p>
    <p>photo:<input type="file" name="photo" id="photo"></p>
    <p><input type="button" name="b1" value="submit" onclick="fsubmit()"></p>
  </form>
  <div id="result"></div>
 <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
 <script type="text/javascript">
  function fsubmit(){
    var data = new FormData($('#form1')[0]);
    $.ajax({
      url: 'server.php',
      type: 'POST',
      data: data,
      dataType: 'JSON',
      cache: false,
      processData: false, //不處理發(fā)送的數據,因為data值是FormData對象,不需要對數據做處理
      contentType: false  //不設置Content-type請求頭
    }).done(function(ret){
      if(ret['isSuccess']){
        var result = '';
        result += 'name=' + ret['name'] + '<br>';
        result += 'gender=' + ret['gender'] + '<br>';
        result += '<img src="' + ret['photo'] + '" width="100">';
        $('#result').html(result);
      }else{
        alert('提交失敗');
      }
    });
    return false;
  }
 </script>
</body>
</html>

server.php

<?php
$name = isset($_POST['name'])? $_POST['name'] : '';
$gender = isset($_POST['gender'])? $_POST['gender'] : '';
$filename = time().substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'],'.'));
$response = array();
if(move_uploaded_file($_FILES['photo']['tmp_name'], $filename)){
  $response['isSuccess'] = true;
  $response['name'] = $name;
  $response['gender'] = $gender;
  $response['photo'] = $filename;
}else{
  $response['isSuccess'] = false;
}
echo json_encode($response);
?>

帶顯示圖片的上傳圖片

// -------- 將以base64的圖片url數據轉換為Blob --------
function convertBase64UrlToBlob(urlData, filetype){
    //去掉url的頭,并轉換為byte
    var bytes = window.atob(urlData.split(',')[1]);
    //處理異常,將ascii碼小于0的轉換為大于0
    var ab = new ArrayBuffer(bytes.length);
    var ia = new Uint8Array(ab);
    var i;
    for (i = 0; i < bytes.length; i++) {
      ia[i] = bytes.charCodeAt(i);
    }
    return new Blob([ab], {type : filetype});
}
$input.on('change', function (e) {
    var input = $input.get(0);
    var files = input.files || [];
    if (files.length === 0) {
      return;
    }
    console.log('選中 ' + files.length + ' 個文件');
    // 遍歷選中的文件,預覽、上傳
    $.each(files, function (key, file) {
      var filename = file.name || '';
      var fileType = file.type || '';
      var reader = new FileReader();
      // onload事件
      reader.onload = function (e) {
        var base64 = e.target.result || this.result;
        var formData = new FormData();
        formData.append("upload_file", convertBase64UrlToBlob(base64, fileType), filename);
        var xhr = new XMLHttpRequest();
        // 開始上傳
        xhr.open('POST', uploadImgUrl, true);
        // 發(fā)送數據
        xhr.send(formData);
      });
      reader.readAsDataURL(file);
    });
});

二、base64 字符串方式上傳圖片

base64 在線轉換網站:http://tools.jb51.net/transcoding/img2base64

DataURI 允許在HTML文檔中嵌入小文件,可以使用 img 標簽或 CSS 嵌入轉換后的 Base64 編碼,減少 HTTP 請求,加快小圖像的加載時間。 經過Base64 編碼后的文件體積一般比源文件大 30% 左右。

Base64 在CSS中的使用:

.box{
 background-image: url("data:image/jpg;base64,/9j/4QMZR...");
}

Base64 在HTML中的使用:

<img src="data:image/jpg;base64,/9j/4QMZR..." />

不推薦用base64,效率慢,消耗流量,占用空間。推薦使用把base64圖片格式轉換成FormData形式傳遞

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript表單(form)操作技巧大全》、《JavaScript查找算法技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript錯誤與調試技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

相關文章

最新評論