java从入门到入土(3)文件上传

个人学习笔记


1.jsp页面添加表单 文件域和提交

*表单必需添加enctype="multipart/form-data"属性,且以post方式提交

2.添加外部工具jar包  commons-fileupload.jar  commons-io.jar


3.编辑servlet:

		response.setContentType("text/html;charset=utf-8;");
		request.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		
		
		 //1.创建FileItemFactory对象
	    FileItemFactory fif=new DiskFileItemFactory();
	    //2.创建servletFileUpload对象(上传对象)
	    ServletFileUpload sfu=new ServletFileUpload(fif);
	    //设置上传的文件大小限制
	    //sfu.setSizeMax(160*1024);
	    try{
		    //3.解析请求    传文件时的表单可能还有其他内容
		    List list=sfu.parseRequest(request); 
		    out.print("长度:"+list.size()+"
"); //1.获取非文件域表单对象内容 //String pname=list.get(……).getString("utf-8"); //out.print(pname); //2.获取文件域的相关信息及上传 FileItem fi=list.get(0); //上传 //创建目标文件对象 //将相对路径转化为绝绝路径 String path=request.getRealPath("upload"); //生成唯一文件名 //获取文件的扩展名 String upfileName=fi.getName(); String extName=upfileName.substring(upfileName.lastIndexOf(".")); //实现文件类型的判断 List types=Arrays.asList(".jpg",".jpeg",".gif"); if(!types.contains(extName)){ request.setAttribute("info", "只能上传jpg,gif的图片");} else { //目标文件保存的位置 String fileName=System.currentTimeMillis()+extName; String savePath=path+File.separator+fileName; //上传 File file=new File(savePath); fi.write(file); request.setAttribute("info", "上传成功"); } }catch(FileUploadBase.SizeLimitExceededException ex){ request.setAttribute("info", "超出大小限制"); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }

以上  由于原本的文件上传无法和其他表单同时使用 在引入外部jar包以后就可以了  同时也可以限定上传文件的大小和文件类型限制

使用其他的jar包还可以实现在文件上传之前就限定文件类型 而不是上传了以后再检测文件类型

为防止文件名冲突可以在文件名中加入时间

你可能感兴趣的:(java从入门到入土(3)文件上传)