JavaWeb如何实现上传文件功能(javaweb,开发技术)

时间:2024-05-06 05:38:17 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

这是需要使用到的两个jar包一定要导入到lib目录中,并添加到发布的lib目录下

JavaWeb如何实现上传文件功能

index.jsp

<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>$Title$</title></head><body><ahref="upload.jsp"rel="externalnofollow">点击上传文件</a></body></html>

JavaWeb如何实现上传文件功能

upload.jsp

<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>上传文件页面</title></head><body><formaction="${pageContext.request.contextPath}/upload.do"enctype="multipart/form-data"method="post"><p>请输入用户:<inputtype="text"name="username"></p><p>上传文件:<inputtype="file"name="file"></p><p><inputtype="submit"></p></form></body></html>

JavaWeb如何实现上传文件功能

UpLoadServlet

packagecom.pzy.servlet;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.FileUploadException;importorg.apache.commons.fileupload.ProgressListener;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.fileupload.servlet.ServletFileUpload;importjavax.servlet.http.HttpServletRequest;importjava.io.*;importjava.util.List;importjava.util.UUID;publicclassUpLoadServletextendsjavax.servlet.http.HttpServlet{protectedvoiddoPost(javax.servlet.http.HttpServletRequestrequest,javax.servlet.http.HttpServletResponseresponse)throwsjavax.servlet.ServletException,IOException{doGet(request,response);}protectedvoiddoGet(javax.servlet.http.HttpServletRequestrequest,javax.servlet.http.HttpServletResponseresponse)throwsjavax.servlet.ServletException,IOException{try{//先判断提交的是普通请求还是带有文件的请求if(!ServletFileUpload.isMultipartContent(request)){return;//如果是普通文件,直接返回}//如果通过了这个if,那说明表单是带有文件的//创建上传文件的保存路径,建议在WEB-INF下,因为这个文件夹是安全的,用户是无法访问这个文件夹的StringuploadPath=this.getServletContext().getRealPath("/WEB-INF/upload");FileuploadFile=newFile(uploadPath);//判断这个文件夹是否存在if(!uploadFile.exists()){uploadFile.mkdir();}//创建一个临时路径,假如文件超过了预期的大小,我们就把他放在一个临时文件下,过几天自动删除,或者提醒用户转存为永久StringtmpPath=this.getServletContext().getRealPath("/WEB-INF/tmp");Filefile=newFile(tmpPath);//判断文件夹是否存在if(!file.exists()){file.mkdir();//没有的话就创建一个这样的目录}/*处理上传的文件,一般都需要通过流来获取,我们可以使用request.getInputStream(),原生态的文件上传流获取,十分麻烦*我们建议使用Apache的文件上传组件来实现,commons-fileupload,它需要依赖于common-io*///1.创建DiskFileItemFactory对象,处理文件上传路径和大小限制的;DiskFileItemFactoryfactory=getDiskFileItemFactory(file);//2.获取ServletFileUpLoadServletFileUploadupload=getServletFileUpLoad(factory);//3.处理上传的文件Stringmsg=uploadParseRequest(upload,request,uploadPath);//servlet请求转发消息request.setAttribute("msg",msg);request.getRequestDispatcher("msg.jsp").forward(request,response);}catch(FileUploadExceptione){e.printStackTrace();}}publicstaticDiskFileItemFactorygetDiskFileItemFactory(Filefile){DiskFileItemFactoryfactory=newDiskFileItemFactory();//通过这个工厂设置一个缓冲区,当上传的文件大于这个缓冲区的时候,将他放入临时文件中factory.setSizeThreshold(1024*1024);//此时设置缓冲区大小为1Mfactory.setRepository(file);//临时目录的保存目录,需要一个filereturnfactory;}publicstaticServletFileUploadgetServletFileUpLoad(DiskFileItemFactoryfactory){ServletFileUploadupload=newServletFileUpload(factory);//监听文件上传进度upload.setProgressListener(newProgressListener(){@Override//pBytesRead是已经读取的文件大小//pContentLength是文件的大小publicvoidupdate(longpBytesRead,longpContentLength,intpItems){System.out.println("总大小:"+pContentLength+"目前上传大小:"+pBytesRead);}});//处理乱码问题upload.setHeaderEncoding("UTF-8");//设置单个文件的最大值upload.setFileSizeMax(1024*1024*10);//最大值为10m//设置总共文件能够上传的文件大小upload.setSizeMax(1024*1024*10);returnupload;}publicstaticStringuploadParseRequest(ServletFileUploadupload,HttpServletRequestrequest,StringuploadPath)throwsFileUploadException,IOException{Stringmsg="";//把前端请求进行解析,封装成一个FileItem对象List<FileItem>fileItems=upload.parseRequest(request);for(FileItemfileItem:fileItems){if(fileItem.isFormField()){//判断上传的文件是普通的表单还是带文件的表单//getFieldName指的是前端表单控件的name;Stringname=fileItem.getFieldName();Stringvalue=fileItem.getString("UTF-8");//处理乱码System.out.println(name+":"+value);}else{//判断它是上传的文件//============================================处理文件=================================//拿到文件的名字StringuploadFileName=fileItem.getName();System.out.println("上传的文件名是:"+uploadFileName);if(uploadFileName.trim().equals("")||uploadFileName==null){continue;}//获得上传的文件名(一般进来的文件都会包含目录.例如/image/girl/pop.png)StringfileName=uploadFileName.substring(uploadFileName.lastIndexOf("/")+1);//获得后缀StringfileExtName=uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);/*如果文件后缀名fileExtName不是我们需要的就直接return,不处理,告诉用户文件类型不对*/System.out.println("文件信息名:"+fileName+"----文件类型"+fileExtName);//可以使用UUID(唯一识别的通用码),保证文件名的唯一;//UUID.randomUUID(),随机生成一个唯一识别的通用码;StringuuidPath=UUID.randomUUID().toString();//==========================文件处理完毕=====================================//存到哪?uploadPath//文件的真实存在路径realPathStringrealPath=uploadPath+"/"+uuidPath;//给每个文件创建一个对应的文件夹FilerealPathFile=newFile(realPath);if(!realPathFile.exists()){realPathFile.mkdir();}//=================================存放地址完毕========================================//获得文件上传的流InputStreaminputStream=fileItem.getInputStream();//创建一个文件输出流//realPath=真实的文件夹//这只是到最后一级的目录,还差一个文件;加上输出文件的名字+"/"uuidFileName;FileOutputStreamfos=newFileOutputStream(realPath+"/"+fileName);//创建一个缓冲区byte[]buffer=newbyte[1024*1024];//判断是否读取完毕intlen=0;while((len=inputStream.read(buffer))>0){fos.write(buffer,0,len);}//关闭流fos.close();inputStream.close();msg="文件上传成功!";fileItem.delete();//上传完成,删除临时文件//===========================文件传输完成==================}}returnmsg;}}

msg.jsp

<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>消息提示</title></head><body>${msg}</body></html>

WEB-XML

<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>UpLoadServlet</servlet-name><servlet-class>com.pzy.servlet.UpLoadServlet</servlet-class></servlet><servlet-mapping><servlet-name>UpLoadServlet</servlet-name><url-pattern>/upload.do</url-pattern></servlet-mapping></web-app>

上传成功后,可以看到upload文件夹下存在一个有uuid码组成的文件夹,文件夹下是我们上传的文件

JavaWeb如何实现上传文件功能

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:JavaWeb如何实现上传文件功能的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:MyBatis元素resultMap如何使用下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18