jsp+servlet简单实现上传文件功能(保存目录改进)
1、jsp前端
<%-- CreatedbyIntelliJIDEA. User:Lenovo Date:2020/6/19 Time:22:53 Learnfromhttps://www.bilibili.com/video/BV18z411i7gh?t=23&p=192 TochangethistemplateuseFile|Settings|FileTemplates. --%> <%@pagecontentType="text/html;charset=UTF-8"language="java"%>文件上传 编号 名字 照片
2、servlet后台
packageServlet.bookServlet; importorg.apache.commons.fileupload.FileItem; importorg.apache.commons.fileupload.FileUploadException; importorg.apache.commons.fileupload.disk.DiskFileItemFactory; importorg.apache.commons.fileupload.servlet.ServletFileUpload; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.io.*; importjava.text.SimpleDateFormat; importjava.util.Calendar; importjava.util.Date; importjava.util.List; @WebServlet(name="UploadImageServlet") publicclassUploadImageServletextendsHttpServlet{ @Override protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ this.doPost(request,response); } @Override protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //1、判断请求是不是multipart请求 if(!ServletFileUpload.isMultipartContent(request)){ thrownewRuntimeException("当前请求不支持文件上传"); } System.out.println("开始上传文件"); //2、创建FileItem工厂==>文件写入硬盘的作用 try{ DiskFileItemFactoryfactory=newDiskFileItemFactory(); //3、创建temp临时文件夹 StringtempPath="D:\\tomcat\\apache-tomcat-9.0.35-windows-x64\\apache-tomcat-9.0.35\\webapps\\librarySystem\\web\\net\\temp"; FiletempFile=newFile(tempPath); factory.setRepository(tempFile); //4、设置使用临时文件的边界值,大于该值,上传文件先保存在临时文件中,小于该值,则直接写入内存 //单位是字节 factory.setSizeThreshold(1024*1024*1); //5、创建文件上传核心组件 //调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。 ServletFileUploadupload=newServletFileUpload(factory); upload.setHeaderEncoding("utf-8");//可以解决文件名中文乱码 upload.setFileSizeMax(1024*1024*2); StringbNo="defaultBNo",bName="defaultBName"; //6、解析请求 Listitems=upload.parseRequest(request); //7、遍历请求 for(FileItemitem:items){ //普通表单项,上传名字,编号等普通信息的上i传 if(item.isFormField()){ StringfileName=item.getFieldName();//name属性值 StringfileValue=item.getString("utf-8");//name对应的value值 System.out.println(fileName+"--"+fileValue); if(fileName.equalsIgnoreCase("BNO")){ bNo=fileValue; } if(fileName.equalsIgnoreCase("BNAME")){ bName=fileValue; } } else{//上传图片等 StringfileName=item.getName(); System.out.println("上传文件名字:"+fileName); Stringsuffix=fileName.substring(fileName.lastIndexOf('.'));//获取文件类型 StringnewFileName=bNo+"_"+bName+suffix; System.out.println(newFileName); //获取输入流,其中有上传文件的内容 InputStreamis=item.getInputStream(); //Stringpath=this.getServletContext().getRealPath("/net/bookImage");//获得当前项目保存服务器地址,也就是web文件夹下 Stringpath="D:\\tomcat\\apache-tomcat-9.0.35-windows-x64\\apache-tomcat-9.0.35\\webapps\\librarySystem\\web\\net\\bookImage"; //文件夹内文件数目有上限,但是可以创建子目录 //获取当前系统时间 Calendarnow=Calendar.getInstance(); intyear=now.get(Calendar.YEAR); intmonth=now.get(Calendar.MONTH)+1; intday=now.get(Calendar.DAY_OF_MONTH); path=path+"/"+year+"/"+month+"/"+day; //若该目录不存在,直接创建新目录 FiledirFile=newFile(path); if(!dirFile.exists()){ dirFile.mkdirs(); } //创建目标文件,用来保存上传文件 FiledesFile=newFile(path,newFileName); //创建文件输出流 OutputStreamos=newFileOutputStream(desFile); //将输入流数据写入到输出流中 intlen=-1; byte[]buf=newbyte[1024]; while((len=is.read(buf))!=-1){ os.write(buf,0,len); } //desFile.delete();//删除临时文件 os.close();//输出流 is.close();//输入流 //删除临时文件 item.delete(); } } }catch(FileUploadExceptione){ e.printStackTrace(); } } }
总结
到此这篇关于jsp+servlet简单实现上传文件(保存目录改进)的文章就介绍到这了,更多相关jspservlet实现上传文件内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!