servler中表單加了enctype="multipart/form-data"屬性后request就接收不到表單傳過來的值了


在解決博問node.js接受參數的時候,發現當form中添加enctype:"multipart/form-data",后台確實獲取不到數據,於是跑到百度上查了一下,終於明白為什么了,下面轉載一下原因吧:

1.get方式 
get方式提交的話,表單項都保存在http header中,格式是 
http://localhost:8080/hello.do?name1=value1&name2=value2這樣的字符串。server端通過request.getParameter是可以取到值的。 

2.post方式(enctype為缺省的application/x-www-form-urlencoded) 
表單數據都保存在http的正文部分,格式類似於下面這樣:用request.getParameter是可以取到數據的 

name1=value1&name2=value2 

3.post方式(enctype為multipart/form-data,多用於文件上傳,對於只想傳value的做法,顯然使用application/json或者text/plain會好很多。可以把數據放到form的header或者body中,在后台使用相應的方法得到具體值) 
表單數據都保存在http的正文部分,各個表單項之間用boundary隔開。格式類似於下面這樣:用request.getParameter是取不到數據的,這時需要通過request.getInputStream來取數據,不過取到的是個InputStream,所以無法直接獲取指定的表單項(需要自己對取到的流進行解析,才能得到表單項以及上傳的文件內容等信息)。這種需求屬於比較共通的功能,所以有很多開源的組件可以直接利用。比如:apache的fileupload組件,smartupload等。通過這些開源的upload組件提供的API,就可以直接從request中取得指定的表單項了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM