背景

在網(wǎng)站開發(fā)中,文件上傳是很常見的一個(gè)功能。相信很多人都會(huì)遇到這種情況,想傳一個(gè)文件上去,然后網(wǎng)頁提示“該文件過大”。因?yàn)橐话闱闆r下,我們都需要對(duì)上傳的文件大小做限制,防止出現(xiàn)意外的情況。
但是在有些業(yè)務(wù)場景中,大文件上傳又是必須的,比如郵箱附件,或者內(nèi)部OA等等。

問題

服務(wù)端為什么不能直接傳大文件?跟php.ini里面的幾個(gè)配置有關(guān)

upload_max_filesize = 2M //PHP最大能接受的文件大小post_max_size = 8M //PHP能收到的最大POST值'memory_limit = 128M //內(nèi)存上限max_execution_time = 30 //最大執(zhí)行時(shí)間

當(dāng)然不能簡單粗暴的把上面幾個(gè)值調(diào)大,否則服務(wù)器內(nèi)存資源吃光是遲早的問題。

解決思路

好在HTML5開放了新的FILE API,也可以直接操作二進(jìn)制對(duì)象,我們可以直接在瀏覽器端實(shí)現(xiàn)文件切割,按照以前的做法就得用Flash的方案,實(shí)現(xiàn)起來會(huì)麻煩很多。

JS思路
1.監(jiān)聽上傳按鈕的onchange事件
2.獲取文件的FILE對(duì)象
3.把文件的FILE對(duì)象進(jìn)行切割,并且附加到FORMDATA對(duì)象中
4.把FORMDATA對(duì)象通過AJAX發(fā)送到服務(wù)器
5.重復(fù)3、4步驟,直到文件發(fā)送完。

網(wǎng)友評(píng)論