老规矩还是先上图看效果:
对于上传文件,浏览器在上传的过成中将文件已字节流的形式提交到服务器,小编一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,给出ssm框架pom.xml 配置
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
上传页面的代码如下(jsp):
<form action="<%=request.getContextPath()%>/UserController/fileUpload" method="post" enctype="multipart/form-data" id="uploadForm"> <input type="file" name="images"> <input type="file" name="images"> <button type="submit" name="" >上传</button> </form>
这里使用传统的form 表单提交 值得注意的地方 enctype="multipart/form-data" 必写来表示进行文件上传 如果多图上传input的name 属性一定要相同
处理文件上传的HttpServlet 工具类
//设置上传保存图片的路径 url是你要保存的图片的路径 //为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下。 String savePaht=url; File file=new File(savePaht); //判断上传的目录是否存在 if(!file.exists()){ //如果不存在则创建 file.mkdir(); } //1 创建一个磁盘diskFileItemFactory 工厂 DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory(); //2 创建一个servletFileUpload 解析器 ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory); servletFileUpload.setHeaderEncoding("UTF-8"); //3、判断提交上来的数据是否是上传表单的数据 if (ServletFileUpload.isMultipartContent(req)) { try{ //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项 List<FileItem> list=servletFileUpload.parseRequest(req); for(FileItem item:list){ if(item.isFormField()){ //如果fileitem中封装的是普通输入项的数据 }else{ //如果fileitem中封装的是上传文件 //得到上传的文件名 String fileName=item.getName(); if(fileName!=null || !"".equals(fileName)){ //验证上传的图片后缀 是不是以 (jpg,png,jpeg)结尾的 if(fileName.substring(fileName.lastIndexOf(".")+1).equals("jpg") || fileName.substring(fileName.lastIndexOf(".")+1).equals("png")|| fileName.substring(fileName.lastIndexOf(".")+1).equals("jpeg")){ fileName=fileName.substring(fileName.lastIndexOf(".")); //赋予新名字 采用的是时间戳(防止有重名的文件保证唯一性 如果不采用时间戳可以采用UUID) //如果不赋予新的名字 上传的图片有重复 会自动覆盖 String newfileName=new Date().getTime()+fileName; //获取item中的上传文件的输入流 InputStream in=item.getInputStream(); //把图片输出到指定的文件中 FileOutputStream out=new FileOutputStream(savePaht + "\\" + newfileName); //创建一个缓冲区 byte bytes[]=new byte[1024]; //验证输入流中的数据是否读完 int len=0; while((len=in.read(bytes))>0){ //使用FileOutputStream 输出到指定文件中 out.write(bytes,0,len); } System.out.println("上传成功!"); //关闭输入流 in.close(); //关闭输出流 out.close(); //删除处理文件上传时生成的临时文件 item.delete(); }else{ //必须是图片 } }else{ //如果图片文件名为空 } } } }catch(Exception e){ e.printStackTrace(); } }else{ //如果不是使用表单提交数据 }
到这里就告一段落 其实很简单 多写多练 自认而然就得心应手 当然还有很多其他的方法
后面会继续跟新下载,excl导入,导出 等。。。。