微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javaweb实现文件上传示例代码

这篇文章主要为大家详细介绍了javaweb实现文件上传的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了javaweb文件下载的具体实现代码,供大家参考,具体内容如下

文件上传示例

注意:jsp页面编码为"UTF-8"

文件上传的必要条件

1.form表单,必须为POST方式提交

2.enctype="multipart/form-data"

3.必须有

前端jsp页面

My JSP 'index.jsp' starting page

文件的描述:

实现文件上传的servlet

package com.learning.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.UUID; import javax.servlet.servletexception; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.diskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FilenameUtils; /** * Servlet implementation class UpLoadServlet */ @WebServlet("/servlet/upLoadServlet") public class UpLoadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException { doGet(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException { //文件上传 //判断是否支持文件上传 boolean isMultipartContent = ServletFileUpload .isMultipartContent(request); if (!isMultipartContent) { throw new RuntimeException("不支持"); } // 创建一个diskFileItemfactory工厂类 diskFileItemFactory diskFileItemFactory=new diskFileItemFactory(); // 创建一个ServletFileUpload核心对象 ServletFileUpload fileUpload=new ServletFileUpload(diskFileItemFactory); //设置中文乱码 fileUpload.setHeaderEncoding("UTF-8"); //设置一个文件大小 fileUpload.setFileSizeMax(1024*1024*3); //大小为3M //设置总文件大小 //fileUpload.setSizeMax(1024*1024*10);//大小为10M try { //fileload解析request请求,返回list集合 List fileItems = fileUpload.parseRequest(request); for (FileItem fileItem : fileItems) { if (fileItem.isFormField()) { //是文本域 (处理文本域的函数) processFormField(fileItem); }else { //文件域 (处理文件域的函数) processuploadField1(fileItem); } } } catch (FileUploadException e) { e.printstacktrace(); } } /** * @param fileItem * */ private void processuploadField1(FileItem fileItem) { try { //获得文件读取流 InputStream inputStream = fileItem.getInputStream(); //获得文件名 String fileName = fileItem.getName(); //对文件名处理 if (fileName!=null) { fileName.substring(fileName.lastIndexOf(File.separator)+1); }else { throw new RuntimeException("文件名不存在"); } //对文件名重复处理 // fileName=new String(fileName.getBytes("ISO-8859-1"),"UTF-8"); fileName=UUID.randomUUID()+"_"+fileName; //日期分类 SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); String date = simpleDateFormat.format(new Date()); //创建目录 File parent=new File(this.getServletContext().getRealPath("/WEB-INF/upload/"+date)); if (!parent.exists()) { parent.mkdirs(); } //上传文件 fileItem.write(new File(parent, fileName)); //删除临时文件(如果上传文件过大,会产生.tmp的临时文件) fileItem.delete(); } catch (IOException e) { System.out.println("上传失败"); e.printstacktrace(); } catch (Exception e) { } } /** * @param fileItem */ //文件域 private void processuploadField(FileItem fileItem) { try { //获得文件输入流 InputStream inputStream = fileItem.getInputStream(); //获得是文件名字 String filename = fileItem.getName(); //对文件名字处理 if (filename!=null) { // filename.substring(filename.lastIndexOf(File.separator)+1); filename = FilenameUtils.getName(filename); } //获得路径,创建目录来存放文件 String realPath = this.getServletContext().getRealPath("/WEB-INF/load"); File storeDirectory=new File(realPath);//既代表文件又代表目录 //创建指定目录 if (!storeDirectory.exists()) { storeDirectory.mkdirs(); } //防止文件名一样 filename=UUID.randomUUID()+"_"+filename; //目录打散 防止同一目录文件文件太多,不好查找 //按照日期分类存放上传文件 //storeDirectory = makeChildDirectory(storeDirectory); //多级目录存放上传文件 storeDirectory = makeChildDirectory(storeDirectory,filename); FileOutputStream fileOutputStream=new FileOutputStream(new File(storeDirectory, filename)); //读取文件输出到指定的目录中 int len=1; byte[] b=new byte[1024]; while((len=inputStream.read(b))!=-1){ fileOutputStream.write(b, 0, len); } //关闭流 fileOutputStream.close(); inputStream.close(); } catch (IOException e) { e.printstacktrace(); } } //按照日期来分类 private File makeChildDirectory(File storeDirectory) { SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); String date = simpleDateFormat.format(new Date()); //创建目录 File childDirectory=new File(storeDirectory, date); if (!childDirectory.exists()) { childDirectory.mkdirs(); } return childDirectory; } //多级目录 private File makeChildDirectory(File storeDirectory, String filename) { filename=filename.replaceAll("-", ""); File childDirectory =new File(storeDirectory, filename.charat(0)+File.separator+filename.charat(1)); if (!childDirectory.exists()) { childDirectory.mkdirs(); } return childDirectory; } //文本域 private void processFormField(FileItem fileItem) { //对于文本域的中文乱码,可以用new String()方式解决 try { String fieldName = fileItem.getFieldName();//表单中字段名name,如description String fieldValue = fileItem.getString("UTF-8");//description中value // fieldValue=new String(fieldValue.getBytes("ISO-8859-1"),"UTF-8"); System.out.println(fieldName +":"+fieldValue); } catch (UnsupportedEncodingException e) { // Todo Auto-generated catch block e.printstacktrace(); } } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐