FormData 對象上傳二進制文件
阿新 • • 發佈:2018-02-24
請求 rem xbox mas length borde size obj -m 使用jQuery 利用 FormData 上傳文件:http://harttle.com/2016/07/04/jquery-file-upload.html
通過FormData對象可以組裝一組用
XMLHttpRequest
發送請求的鍵/值對。它可以更靈活方便的發送表單數據,因為可以獨立於表單使用。如果你把表單的編碼類型設置為multipart/form-data ,則通過FormData傳輸的數據格式和表單通過submit() 方法傳輸的數據格式相同,也就是二進制文件。
不是用<form>表單構造FormData對象,var file = fileInput.files[0];它的file值為以下的圖片的對象{ lastModified:1247549551674 lastModifiedDate:Tue Jul 14 2009 13:32:31 GMT+0800 (中國標準時間) {} name:"ju.jpg" size:879394 type:"image/jpeg" webkitRelativePath:"" }
可以自己創建一個FormData對象,然後通過調用它的append()方法添加字段,就像這樣:
var formData = new FormData(); formData.append("username", "Groucho"); formData.append("accountnum", 123456); // 數字 123456 會被立即轉換成字符串 "123456" // HTML 文件類型input,由用戶選擇 formData.append("userfile", fileInputElement.files[0]); // JavaScript file-like 對象var content = ‘<a id="a"><b id="b">hey!</b></a>‘; // 新文件的正文...var blob = new Blob([content], { type: "text/xml"}); formData.append("webmasterfile", blob); var request = new XMLHttpRequest(); request.open("POST", "http://foo.com/submitform.php"); request.send(formData);
通過表單創建 FormData 對象
<form id="uploadForm" enctype="multipart/form-data">
<input id="file" type="file" name="file"/>
<button id="upload" type="button">upload</button>
</form>
enctype="multipart/form-data" 文件的二進制屬性
上傳文件部分只有底層的XMLHttpRequest對象發送上傳請求,那麽怎麽通過jQuery的Ajax上傳呢?
本文將介紹通過jQuery使用FormData對象上傳文件。
使用<form>表單初始化FormData對象方式上傳文件
<form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file" name="file"/> <button id="upload" type="button">upload</button> </form> $.ajax({ url: ‘/upload‘, type: ‘POST‘, cache: false, data: new FormData($(‘#uploadForm‘)[0]), processData: false, contentType: false }).done(function(res) { }).fail(function(res) {});這裏要註意幾點:
- processData設置為false。因為data值是FormData對象,不需要對數據做處理。
- <form>標簽添加enctype="multipart/form-data"屬性。
- cache設置為false,上傳文件不需要緩存。
- contentType設置為false。因為是由<form>表單構造的FormData對象,且已經聲明了屬性enctype="multipart/form-data",所以這裏設置為false。
<form>
表單構造FormData
對象,常用
<div id="uploadForm"> <input id="file" type="file" multiple/> <button id="upload" type="button">upload</button> </div> var formData = new FormData(); formData.append(‘file‘, $(‘#file‘)[0].files[0]); $.ajax({ url: ‘/upload‘, type: ‘POST‘, cache: false, data: formData, processData: false, contentType: false }).done(function(res) { // }).fail(function(res) { // });這裏有幾處不一樣:
- append()的第二個參數應是文件對象,即$(‘#file‘)[0].files[0]。
- contentType也要設置為‘false’。
Form Data 圖片上傳,手機版,使用 mui 的方法,效果圖為:
<style> .anviz-upload-file .image-item{ width: 30px; height: 30px; background-image: url(../../img/icon/add.png); background-size: 100% 100%; display: inline-block; position: relative; border-radius: 5px; margin-right: 10px; margin-bottom: 10px; border: solid 1px #e8e8e8; margin-left: 20px; } .anviz-upload-file .image-item .image-close { position: absolute; display: inline-block; right: -6px; top: -6px; width: 20px; height: 20px; text-align: center; line-height: 20px; border-radius: 12px; background-color: #FF5053; color: #f3f3f3; border: solid 1px #FF5053; font-size: 9px; font-weight: 200; z-index: 1; } .anviz-upload-file .image-item input[type="file"]{ position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 0; } .img-list{ width: 100%; height: 105px; padding: 10px 10px; overflow: hidden; border-top: 1px solid #c8c7cc; border-bottom: 1px solid #c8c7cc; background: #fff; margin: 0; display: -webkit-box; display: -ms-flexbox; display: flex; justify-content: flex-start; overflow: scroll; } .img-list li{ position: relative; margin-right: 15px; } .img-list li img{ width: 85px; height: 85px; } .img-list li span{ position: absolute; top: -5px; left: 73px; background: #00a0e8; width: 20px; height: 20px; border-radius: 20px; text-align: center; line-height: 18px; color: #fff; } </style> <ul class="mui-table-view mui-grid-view mui-grid-9"> <li class="mui-table-view-cell mui-media mui-col-xs-6 mui-col-sm-6 anviz-upload-warp" style="display: flex;padding: 0;"> <h5 class="anviz-padded">Attachments</h5> <div class="anviz-upload-file"> <div class="image-item"> <input id="file" type="file" /> </div> </div> </li> </ul> <ul id="imgList" class="img-list"></ul>
<script> mui.ready(function(){ var myfile = document.getElementById(‘file‘); var List = document.getElementsByClassName(‘img-list‘)[0]; myfile.onchange = function(){ var files = this.files; if(!files)return; for(var i = 0;i<files.length;i++){ var oLi = ‘<li><img src="‘+URL.createObjectURL(files[i])+‘"><span class="close" onclick="closeli(this)" >×</span></li>‘; List.innerHTML+=oLi; } } }); function closeli(obj){ var filearr = []; var closes = document.getElementsByClassName(‘close‘); [].slice.call(closes).forEach(function(dom,index){ if(obj === closes[index]){ filearr.splice(index,1); }; }); obj.parentNode.remove(); } </script>
親測可用!歡迎指正交流。
FormData 對象上傳二進制文件