FormData上傳文件

將本地數據(.xlsx、.docx等文件)上傳或導入數據庫,有時候需要使用FormData 對象。FormData對象,可以把所有表單元素的name與value組成一個queryString,提交到後臺。
一、創建對象:
創建一個FormData對象實例
1、常用的創建

let formData = new FormData();

2、vue中的創建

let formData = new window.FormData();

3、在表單的基礎上創建

<form id="fromCont" action="" method="post">
    <input type="text" name="content">
    <input type="submit" value="提交">
</form>
//根據id獲取表單
  var form = $("#fromCont");
//初始化實例
var formData = new FormData(form);
// 獲取content內容
var content= formData.get("content"); 
//通過append() 方法向對象中添加content鍵值對
formData.append("content",content);

二、操作方法:
formData裏面存儲的數據形式,一對key/value組成一條數據,key是唯一的,一個key可能對應多個value。如果是使用表單初始化,每一個表單字段對應一條數據,它們的HTML name屬性即爲key值,它們value屬性對應value值。
1、獲取值

//通過get(key)/getAll(key)來獲取對應的value
formData.get("value");  

2、添加數據

//通過append(key, value)來添加數據,如果指定的key不存在則會新增一條數據,如果key存在,則添加到數據的末尾
formData.append("key1", "value1");
formData.append("key2", "value2");
formData.append("key2", "value3");
//獲取key1
formData.get("key1");  //返回 "value1"
formData.get("key2");  //返回 "value2"
formData.getAll("key2");  //返回 ['value2','value3']

3、設置、修改數據

//通過set(key, value)來設置修改數據,如果指定的key不存在則會新增一條,如果存在,則會修改對應的value值。
formData.append("key1", "value1");
formData.set("key1", "value2");
//獲取key1
formData.get("key1");  //返回 "value2"

4、刪除數據

//通過delete(key),來刪除數據
formData.append("key1", "value1");
formData.delete("k1");
//獲取key1
formData.get("key1");  //返回 []

5、判斷數據的存在

//通過has(key)來判斷是否對應的key值,如果有對應的key值就返回true,如果沒有則返回false
formData.append("key1", "value1");
formData.has("key1"); // true
formData.has("key2"); // false

三、vue上傳文件

  <template>
    </div>
      <div class="fileItem">
        //上傳文件的input,type設置爲file
        <input type="file" ref="fileId" @change="getFile">
      </div>
  </div>
</template>

<script>
export default {
data(){
   return:{
    //賦值input中file內容
    xlsxFile:''
    }
   },
  methods:{
   getFile(){
     //獲取file內容
    let files = this.$refs.fileId.files[0];
     this.xlsxFile = files;
   },
    //上傳文件
    importRow() {
      let that = this;
      if (that.xlsxFile == "") {
        that.$message.error('請先添加文件');
        return;
      }
    // vue 中使用 window.FormData(),否則會報 'FormData isn't definded'
    //創建一個FormData對象,然後通過append() 方法向對象中添加鍵值對
      let formData = new window.FormData(); 
      formData.append("file", that.xlsxFile);
     // that.importUrl 上傳的接口url
      that.$axios.post(
          that.importUrl,
          formData
        ).then(function(response) {
          that.$message.success('上傳成功');
        }) .catch(function(error) {
          that.$message.error(res.data.msg);
        });
}

}
</script>

四、HTML中上傳文件

//HTML中
<div>
<input name="file" type="file" id="fileCont" value="">
</div>
//JS中,這裏引入了Jquery
       $('#fileCont').on('change',function(){
       var fileObj = $(this).files[0]; 
       if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
        //這裏是我自己定義的彈框方法
        popup({type:'tip',bg:false,msg:"請選擇件",delay:1000,clickDomCancel:true});
        return;
         }
        var formFile = new FormData();
         //加入文件對象,向接口傳入兩個參數file,id
        formFile.append("file", fileObj); 
        formFile.append("id", id); 
         var data = formFile;
          $.ajax({
            url:urlCur,
            data: data,
             type: "POST",
             dataType: "json",
             //上傳文件無需緩存
             cache: false,
             //用於對data參數進行序列化處理 這裏必須false
              processData: false,
             //必須
             contentType: false, 
             success: function (res) {
               if(res.code === 200){
              popup({type:'success',bg:false,msg:"上傳成功",delay:1000,clickDomCancel:true});
              }else{
              popup({type:'error',bg:false,msg:res.msg,delay:1000,clickDomCancel:true});
                }
             },
         }) 
  })

上傳文件需要前後端的小夥伴兒配合,一起完成,第一次進行文件上傳時,遇到了一些麻煩,比如前端傳值的方法不對、後臺接口報500,但是隻要有耐心,肯鑽研,就一定會成功的!
路漫漫其修遠兮,吾將上下而求索。




作者:童話_xxv
鏈接:https://www.jianshu.com/p/51188659d778
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章