樣式美化
請看博客:css input[type=file] 樣式美化,input上傳按鈕美化
input file上傳按鈕的美化思路是,先把之前的按鈕透明度opacity設置為0,然后,外層用div包裹,就實現了美化功能。
DOM結構:
<a href="javascript:;" class="a-upload"> <input type="file" name="" id="">點擊這里上傳文件 </a>
css樣式

/*a upload */ .a-upload { padding: 4px 10px; height: 20px; line-height: 20px; position: relative; cursor: pointer; color: #888; background: #fafafa; border: 1px solid #ddd; border-radius: 4px; overflow: hidden; display: inline-block; *display: inline; *zoom: 1 } .a-upload input { position: absolute; font-size: 100px; right: 0; top: 0; opacity: 0; filter: alpha(opacity=0); cursor: pointer } .a-upload:hover { color: #444; background: #eee; border-color: #ccc; text-decoration: none }
上傳類型控制 參考地址http://www.haorooms.com/post/input_file_leixing
關鍵點是異步提交,就是先選擇文件,但不上傳,待點擊提交按鈕后上傳服務端返回上傳是否成功信息
思路:利用FormData
對象,你可以使用一系列的鍵值對來模擬一個完整的表單,然后使用XMLHttpRequest
發送這個"表單".
創建一個FormData對象
你可以先創建一個空的FormData
對象,然后使用append()
方法向該對象里添加字段,如下:

var oFiles = document.querySelector("#fileId"); var formData = new FormData(); formData.append("newFileName", this.state.formData["newFileName"]); formData.append("url", this.state.formData["url"]); formData.append("picture", oFiles.files[0]); reqwest({ url : '/modules/cms/manager/action/ImageControlAction/uploadImageControl.htm', method: 'post', contentType:false, processData:false, data:formData, success: (result) => { if(result.code==200) { Modal.success({ title: result.msg }); Actions.initStore(); this.props.hideAddModal(); }else{ Modal.error({ title: result.msg }); me.setState({ loading:false }); } } });
效果
我的ajax 是 reqwest,其中有
processData: false, //不要去處理發送的數據
contentType: false //不要去設置Content-Type請求頭