我們實現文件上傳 用位元組流的話代碼量大 效率低下 所以springMVC為我們提供了自己的方法。 SpringMVC專門提供了CommonMultipartResolver組件實現文件上傳: maxUploadSize 文件最大限制,單位是byte maxInMemorySize 低於這個大小的文件 ...
我們實現文件上傳 用位元組流的話代碼量大 效率低下 所以springMVC為我們提供了自己的方法。
SpringMVC專門提供了CommonMultipartResolver組件實現文件上傳:
- maxUploadSize 文件最大限制,單位是byte
- maxInMemorySize 低於這個大小的文件暫存在記憶體中
- defaultEncoding 預設編碼
例如這樣配置:
<!--fileUpload Support-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<!--max size:10M-->
<property name="maxUploadSize" value="10485760"/>
</bean>
上面的的配置,id必須是multipartResolver,這樣才會保證上傳。不能隨意命名
這就是必須保證bean的id相同,才能正常工作。
這時候我們就開始配置form表單,必須添加enctype=“multipart/form-data”:
然後記得引入兩個jar包:
- commons-fileupload.jar
- commens-io-1.4.jar
然後我們開始編寫java代碼:
1.首先將request變成MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
2.接下來就能用getFile來獲取file:
CommonsMultipartFile file = (CommonsMultipartFile)multipartRequest.getFile(“file”);
這個file必須與form表單中input的name的值一致。
3.最後把file移動到目標地址:
FileCopyUtil.cope(file.getByte(),uploadFile);
以上是單文件上傳 ,對於多文件上傳,可以用MultipartHttpServletRequest的getFileMap()來獲取表單傳過來的所有文件
然後用for迴圈遍歷依次上傳文件:
說完了文件上傳,再說下如何下載:
文件下載主要採用位元組流的形式,有三個要點:
1.設置編碼格式為:text/html;charset=utf-8
2.設置header中Content-disposition屬性值為attachment;filename=文件名(這個文件名就是客戶端彈出框文件的名字)
3.設置header中Context-Length屬性,值為文件的大小
以上是一個小例子。
這個是網站的上傳文件跟下載文件,app端怎麼上傳文件以及後臺怎麼處理比較好還在研究中,如果有什麼好辦法可以留言,幫幫小弟,哈哈哈。
補充: Android app 也有enctype=“multipart/form-data” 這個是在請求頭裡面 ,基於http協議的就有這個的,那就都網頁跟app上傳圖片就一樣了這裡只是做個簡單的demo 邏輯代碼不該寫在controller的。
特別註意下:
使用這個MultipartFile的時候,記得在前面加上@RequestParam,不然就會報錯
http://www.cnblogs.com/liuling/p/2014-3-5.html#
往後遇到問題還會繼續更新。
謝謝支持!