1、上傳java
一、上傳通常都是使用表單,須要添加如下部分
* method="post"
* enctype="multipart/form-data"
* 表單中須要添加文件表單項:<input type="file" name="xxx" />緩存
<form action="xxx" method="post" enctype="multipart/form-data"> 用戶名;<input type="text" name="username"/><br/> 照 片:<input type="file" name="zhaoPian"/><br/> <input type="submit" value="上傳"/> </form>
二、上傳會讓request.getParametere("xxx")方法失效,此時將上傳表單項分爲普通表單項和文件表單項。服務器
普通表單項:
> 1個頭:Content-Disposition:包含name="xxxx",即表單項名稱。
> 體就是表單項的值
文件表單項:
> 2個頭:
* Content-Disposition:包含name="xxxx",即表單項名稱;還有一個filename="xxx",表示上傳文件的名稱
* Content-Type:它是上傳文件的MIME類型,post
例如:image/pjpeg,表示上傳的是圖片,圖上中jpg擴展名的圖片。
> 體就是上傳文件的內容。編碼
三、上傳步驟code
準備工做:導入commons-fileupload.jar, commons-io.jar倆個包orm
1). 建立工廠:DiskFileItemFactory factory = new DiskFileItemFactory();
2). 建立解析器:ServletFileUpload sfu = new ServletFileUpload(factory);
3). 使用解析器來解析request,獲得FileItem集合:List<FileItem> fileItemList = sfu.parseRequest(request);圖片
注意:List的順序與表單項從上到下的順序一致。ip
FileItem經常使用的方法:
* boolean isFormField():是否爲普通表單項!返回true爲普通表單項,若是爲false即文件表單項!
* String getFieldName():返回當前表單項的名稱;
* String getString(String charset):傳入編碼,返回表單項的值;
* String getName():返回上傳的文件名稱
* long getSize():返回上傳文件的字節數
* InputStream getInputStream():返回上傳文件對應的輸入流
* String getContentType():獲取上傳文件類型
* void write(File destFile):把上傳的文件內容保存到指定的文件中。get
//建立將要保存文件的文件流 File file=new File("C:/Users/13928/Desktop/圖標.jpg"); item2.write(file); //將文件流寫入服務器
四、上傳文件的大小限制
> sfu.setFileSizeMax(100*1024):限制單個文件大小爲100KB,必須在解析開始以前調用!
> 若是上傳的文件超出限制,在parseRequest()方法執行時,會拋出異常!FileUploadBase.FileSizeLimitExceededException
> sfu.setSizeMax(1024 * 1024):限制整個表單大小爲1M,必須在解析開始以前調用!
> 若是上傳的文件超出限制,在parseRequest()方法執行時,會拋出異常!FileUploadBase.SizeLimitExceededException
五、緩存大小與臨時目錄 * 緩存大小:上傳文件超出多大,才向硬盤保存!默認爲10KB * 臨時目錄:向硬盤的什麼目錄保存 設置緩存大小與臨時目錄:new DiskFileItemFactory(20*1024, new File("E:/temp"));