使用js FormData傳文件流馆匿,傳json(重點)

先介紹js的FormData忙菠,F(xiàn)ormData是XMLHttpRequest Level 2新增的一個接口,利用FormData對象,我們可以通過JavaScript用一些鍵值對來模擬一系列表單控件,我們還可以使用ajax方法來異步的提交這個"表單".使用FormData的最大優(yōu)點就是我們可以異步上傳一個二進制文件.
這里說下FormData的append方法肆良,

給當前FormData對象添加一個鍵/值對(append)

void append(DOMString name, Blob value, optional DOMString filename);
void append(DOMString name, DOMString value);

參數值

name

字段名稱.

value

字段值.可以是,或者一個字符串,如果全都不是,則該值會被自動轉換成字符串.

filename

(可選) 指定文件的文件名,當value參數被指定為一個Blob對象或者一個File對象時,該文件名會被發(fā)送到服務器上,對于Blob對象來說,這個值默認為"blob".

這里要注意下value字段筛璧,如果你要填入的是一個對象,會將它轉換成字符串惹恃,也就是最后傳給后臺的都是[object object]夭谤,這樣后臺當然是無法解析的。下邊舉個例子巫糙,大家就明白了

好了朗儒,請上我們的兩位同學,小明和胖虎参淹,你們就不用發(fā)言了醉锄,我會以json的形式介紹你們的情況和個人癖好,請坐承二。

var json=[
         {'name':'小明','age':15,'skills':['抽煙','喝酒','燙頭'],'family':{'father':'大明','mohter':'小紅'}},
         {'name':'胖虎','age':17,'skills':['打架','打架','還是打架'],'family':{'father':'佐藤','mohter':'愛田'}},
     ]

首先我們先試一下榆鼠,把小明的family對象傳給后臺。

var data=new FormData()
     data.append('family',json[0].family)
     $.ajax({
         url:'demo.php',
         type: "Post",
         dataType: "json",
         cache: false,//上傳文件無需緩存
         processData: false,//用于對data參數進行序列化處理 這里必須false
         contentType: false, //必須
         data:data,
         success:function (res) {
             console.log(res);
         },
         error:function (error) {
             console.log(error);
         }
     })

結果:


被解析成了object object亥鸠,有人該說了妆够,你把它用JSON.stringify序列化之后不就行了,然后后端配合负蚊,再解碼成json神妹,對,這樣確實行家妆,但不要忘了鸵荠,咱們還是需要傳文件流的,文件流被序列化之后會被轉化成一個空對象伤极,這樣后臺就無法識別蛹找。由于時間原因,這里就不演示反面案例了哨坪。
這里我們要用兩個語法
1.a['b']等于a.b
2.c[0]取得是c數組的第一項
正確方法:

var data=new FormData()
for(var i=0,len=json.length;i<len;i++){
        data.append('json['+i+'][name]',json[i].name)
        data.append('json['+i+'][age]',json[i].age)
        data.append('json['+i+'][family][father]',json[i].family.father)
        data.append('json['+i+'][family][mother]',json[i].family.mohter)
        for(var j=0,len2=json[i].skills.length;j<len2;j++){
            data.append('skills['+i+']['+j+']',json[i].skills[j])
        }
    }
     $.ajax({
         url:'demo.php',
         type: "Post",
         dataType: "json",
         cache: false,//上傳文件無需緩存
         processData: false,//用于對data參數進行序列化處理 這里必須false
         contentType: false, //必須
         data:data,
         success:function (res) {
             console.log(res);
         },
         error:function (error) {
             console.log(error);
         }
     })

之后庸疾,我們再給小明和胖虎每人上傳一張個人寫真照(利用input
file,文件流)
這里我們利用input上傳時的file對象当编,
附上代碼:

<input type="file" id="upload">
$('#upload').on('change',function (e) {
         var file = e.target.files[0];
         console.log(file);
         data.append('json[0][image]',file)
     })

這個file對象是一個含有二進制文件届慈,打印為:



這個對象如果直接序列化,會被轉化為一個空對象,后臺無法識別金顿,最后附上vue版代碼:

<input type="file" @click="upload" id="upload">
upload:function (e) {
                var file = e.target.files[0];
                //由于時間和條件原因臊泌,這里只給小明上傳一張寫真照
                data.append('json[0][image]',file)
                for(var i=0,len=json.length;i<len;i++){
                    data.append('json['+i+'][name]',json[i].name)
                    data.append('json['+i+'][age]',json[i].age)
                    data.append('json['+i+'][family][father]',json[i].family.father)
                    data.append('json['+i+'][family][mother]',json[i].family.mohter)
                    for(var j=0,len2=json[i].skills.length;j<len2;j++){
                        data.append('skills['+i+']['+j+']',json[i].skills[j])
                    }
                }
                axios.post(api.sendJSON,data,{
                    headers: {
                        "Content-Type": "multipart/form-data"
                    }
                }).then(function (res) {
                    console.log(res);
                }).catch(function (error) {
                    console.log(error);
                })
            },
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市揍拆,隨后出現(xiàn)的幾起案子渠概,更是在濱河造成了極大的恐慌,老刑警劉巖礁凡,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件高氮,死亡現(xiàn)場離奇詭異,居然都是意外死亡顷牌,警方通過查閱死者的電腦和手機剪芍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窟蓝,“玉大人罪裹,你說我怎么就攤上這事≡舜欤” “怎么了状共?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谁帕。 經常有香客問我峡继,道長,這世上最難降的妖魔是什么匈挖? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任碾牌,我火速辦了婚禮,結果婚禮上儡循,老公的妹妹穿的比我還像新娘舶吗。我一直安慰自己,他們只是感情好择膝,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布誓琼。 她就那樣靜靜地躺著,像睡著了一般肴捉。 火紅的嫁衣襯著肌膚如雪腹侣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天齿穗,我揣著相機與錄音傲隶,去河邊找鬼。 笑死缤灵,一個胖子當著我的面吹牛伦籍,可吹牛的內容都是我干的。 我是一名探鬼主播腮出,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼帖鸦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胚嘲?” 一聲冷哼從身側響起作儿,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎馋劈,沒想到半個月后攻锰,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡妓雾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年娶吞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片械姻。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡妒蛇,死狀恐怖,靈堂內的尸體忽然破棺而出楷拳,到底是詐尸還是另有隱情绣夺,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布欢揖,位于F島的核電站陶耍,受9級特大地震影響,放射性物質發(fā)生泄漏她混。R本人自食惡果不足惜烈钞,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望产上。 院中可真熱鬧棵磷,春花似錦、人聲如沸晋涣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谢鹊。三九已至算吩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佃扼,已是汗流浹背偎巢。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留兼耀,地道東北人压昼。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓求冷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窍霞。 傳聞我的和親對象是個殘疾皇子匠题,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,693評論 0 15
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)但金,斷路器韭山,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 原因: <?php 前有空格、空行冷溃、文件有BOM頭 解決方案: 在heaer輸出之前加ob_clean();
    Sm1les閱讀 306評論 0 0
  • (一) 緣起緣滅似枕,都在那座城盖淡。一個有著蔚藍清澈的天空,波濤澎湃的大海的美麗海濱城市凿歼。 龐大的法國綠梧桐立在干凈涼爽...
    幸美人閱讀 590評論 5 4
  • 摘要:在國內獲獎無數的提琴小帥哥禁舷,在一次社區(qū)音樂學校的招考中被"差評"∫阃考官認為沒有技術層面的問題牵咙,但他沒有在用心...
    Wailian001閱讀 149評論 0 0