1.表單上傳
最傳統的圖片上傳方式是form表單上傳,使用form表單的input[type=”file”]控件,打開系統的文件選擇對話框,從而達到選擇文件並上傳的目的。
form表單上傳
表單上傳需要注意以下幾點:
(1).提供form表單,method必須是post。
(2).form表單的enctype必須是multipart/form-data。
javascript學習交流群:453833554
enctype 屬性規定在發送到服務器之前應該如何對表單數據進行編碼。默認地,表單數據會編碼為 "application/x-www-form-urlencoded"。就是說,在發送到服務器之前,所有字符都會進行編碼。HTML表單如何打包數據文件是由enctype這個屬性決定的。enctype有以下幾種取值:
application/x-www-form-urlencoded:在發送前編碼所有字符(默認)(空格被編碼為’+’,特殊字符被編碼為ASCII十六進制字符)。
multipart/form-data:不對字符編碼。在使用包含文件上傳控件的表單時,必須使用該值。
text/plain:空格轉換為 “+” 加號,但不對特殊字符編碼。
默認enctype=application/x-www-form-urlencoded,所以表單的內容會按URL規則編碼,然后根據表單的提交方法:
method=’get’ 編碼后的表單內容附加在請求連接后,
method=’post’ 編碼后的表單內容作為post請求的正文內容。
(3).提供input type="file"上傳輸入域。
瀏覽器請求體如下:
請求體
2.ajax上傳
ajax和FormData可實現頁面無刷新的文件上傳效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的
FormData接口。通過FormData對象可以更靈活方便的發送表單數據,因為可以獨立於表單使用。如果你把表單的編碼類型設置為multipart/form-data ,則通過FormData傳輸的數據格式和表單通過submit()方法傳輸的數據格式相同。
ajax無刷新上傳
Ajax無刷新上傳的方式,本質上與表單上傳無異,只是把表單里的內容提出來采用ajax提交,並且由前端決定請求結果回傳后的展示結果。
3.各類插件上傳
當上傳的需求要求可預覽、顯示上傳進度、中斷上傳過程、大文件分片上傳等等,這時傳統的表單上傳很難實現這些功能,我們可以借助現有插件完成。
如百度上傳插件Web Uploader、jQuery圖片預覽插件imgPreview 、拖拽上傳與圖像預覽插件Dropzone.js等等,大家可根據項目實際需求選擇適合的插件。
javascript學習交流群:453833554