本文主要介紹使用webuploader上傳文件以及兼容ie八、ie9所遇到的問題及解決方案。webuploader官方簡介兼容ie6+。javascript
個人demo目錄以下:css
upload // 文件夾
webuploader.js
webuploader.css
webuploader.swf
jQuery-1.9.1.js
upload.html
複製代碼
1、 若是上傳文件的框是一個彈出框,控制檯也沒有報錯,一開始屬性爲{display:none},點擊後爲block,點擊"選擇文件"按鈕,可是點擊按鈕沒有響應(全部瀏覽器都沒響應)html
解決:前端
右擊"選擇文件"按鈕看看input file的width、height、position。可能你會發現他們都沒有正常顯示。更改樣式便可。java
2、 若是webuploader.swf沒有與upload.html同級目錄,在ie9如下瀏覽器點擊沒反應node
例如:個人demo目錄以下git
upload // 文件夾
css
webuploader.css
js
webuploader.js
webuploader.swf
jQuery-1.9.1.js
upload.html
複製代碼
3、 若是同層級仍是沒反應,排查問題及解決:github
4、 webuploader如何提交參數web
官方文檔中提出了在初始化中傳入參數,以下:npm
WebUploader.create({
// 。。。其餘配置。。。
// 。。。其餘配置。。。
formData: {
file_uid: '',
file_size: '0'
}
})
複製代碼
可是這個參數是固定的,頁面加載、組件加載時就以經固定了,全部傳入的file_uid= '',file_size= '0', 不能在多文件上傳時傳入不一樣參數。官方文檔沒有給出詳細的動態傳參方式。
傳參方式:
uploader.on('uploadStart', function (file) {
// 每一個文件開始上傳時傳入不一樣參數
uploader.options.formData.file_size = file.source.size;
uploader.options.formData.file_uid = file.source.uid;
})
複製代碼
5、 ie八、ie9採用FLASH上傳的跨域問題
這一點官方文檔裏面沒有詳細介紹。從webuploader github下載的代碼裏找到server目錄下的crossdomain.xml,這個是跨域處理的文件,把這個文件發給大家的後臺,讓後臺把這個文件放在服務器的前端代碼的根目錄下面,與html同層級。ie八、ie9falsh上傳文件時會先發一個get請求是否容許跨域,而後再發上傳文件的請求(前端代碼不須要改動).
以下圖所示:
若是代碼尚未打包給後臺,也沒有放到服務器上,能夠先本身起一個node服務作代理: 在項目的根目錄打開終端輸入:http-server -p 8080 -P http://****/api/v1 -c-1
// -p: 本地訪問的端口號
// -P: 作轉發代理的域名
// -c-1: 禁用緩存
複製代碼
這樣你就能夠在ie八、ie9下成功上傳了。
在ie9如下的瀏覽器上傳超過500Mb 的文件計算md5值時就會超時,會報一個'http'的錯誤。官方也沒有提出解決方案。
參考文獻:
webuploader: https://fex.baidu.com/webuploader/doc/index.html
webuploader github: https://github.com/fex-team/webuploader/issues
做者信息:寧文飛,人和將來大數據前端工程師