Servlet3.0文件上传
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目录下
- 放在项目外部 计算机文件夹中
杂家不如专家,精益求精