Servelt3.0文件上傳作為一種便捷的文件上傳方式很是值得我們去應用的
1.Servlet3.0文件上傳使用步驟
- 瀏覽器端的要求
- 表單的提交方法必須是post
- 必須有一個文件上傳組件 <input type="file" name="f"/>
- 必須設置表單的enctype="multipart/form-data
-
1 <form action="/upload/upload3" enctype="multipart/form-data" 2 method="post"> 3 用戶名:<input type="text" name="username"><br> 4 文件:<input 5 type="file" name="f"> 6 <input type="submit"><br> 7 </form>
- 服務器端的要求
- 在Servelt上添加注解 @MultipartConfig
-
1 /** 2 * Servlet3.0文件上傳下載 3 */ 4 @WebServlet("/upload3") 5 @MultipartConfig 6 public class upload3 extends HttpServlet { 7 private static final long serialVersionUID = 1L; 8 9 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2.Servlet3.0文件上傳如何獲取數據
- 獲取普通上傳組件 request.getParameter(name屬性的值);
- 獲取文件上傳組件 Part p = request.getPart("表單文件組件的name名");
- 獲取表單文件的name名
//獲取表單提交頁面name的屬性值 String name = part.getName();
- 獲取真實文件名
//獲取文件真實文件名 String header = part.getHeader("content-disposition"); String realName=header.substring(header.indexOf("filename=")+10,header.length()-1); - 獲取文件大小
//獲取文件的大小 long size = part.getSize();
- 獲取文件的輸入流
//獲取文件的輸入流 InputStream inputStream = part.getInputStream();
- 獲取表單文件的name名
3.Servlet3.0文件上傳可能會遇到的問題
- 名字重復的問題 如果用戶提交了兩個1.png只會保存第一次 這樣在實際開發中是很不可取的 解決方法有一下
- 采用隨機名稱DSJDLSJDIHU739832hsdhf.png
- 文件安全問題 如果文件都放在WebContext目錄下 那么在互聯網上任何人都可以訪問的到 那么針對重要的文件可以這樣做
- 放在meta-inf目錄下
- 放在web-inf目錄下
- 放在項目外部 計算機文件夾中
