为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

java完成文件的上传[欣赏]

2017-11-14 14页 doc 94KB 14阅读

用户头像

is_963767

暂无简介

举报
java完成文件的上传[欣赏]java完成文件的上传[欣赏] java实现文件的上传 1、文件上传的核心点 1:用 来声明一个文件域。File:_____ . 2:必须要使用post方式的表单。 3:必须设置表单的类型为multipart/form-data.是设置这个表单传递的不是key=value值。传递的是字节码. 对于一个普通的表单来说只要它是post类型。默认就是 Content-type:application/x-www-from-urlencoded 表现形式 1:在request的请求头中出现。 2:在form声明时设...
java完成文件的上传[欣赏]
java完成文件的上传[欣赏] java实现文件的上传 1、文件上传的核心点 1:用 来声明一个文件域。File:_____ <浏览>. 2:必须要使用post方式的单。 3:必须设置表单的类型为multipart/form-data.是设置这个表单传递的不是key=value值。传递的是字节码. 对于一个普通的表单来说只要它是post类型。默认就是 Content-type:application/x-www-from-urlencoded 表现形式 1:在request的请求头中出现。 2:在form声明时设置一个类型enctype="application/x-www-form-urlencoded"; 如果要实现文件上传,必须设置enctype=“multipart/form-data” 表单与请求的对应关系: 2、如何获取上传的文件的内容,以下是自己手工解析txt文档 package cn.itcast.servlet; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 如果一个表单的类型是post且enctype为multipart/form-date * 则所有数据都是以二进制的方式向服务器上传递。 * 所以req.getParameter("xxx")永远为null。 * 只可以通过req.getInputStream()来获取数据,获取正文的数据 * * @author wangjianme * */ public class UpServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); String txt = req.getParameter("txt");//返回的是null System.err.println("txt is :"+txt); System.err.println("========================================="); InputStream in = req.getInputStream(); // byte[] b= new byte[1024]; // int len = 0; // while((len=in.read(b))!=-1){ // String s = new String(b,0,len); // System.err.print(s); // } BufferedReader br = new BufferedReader(new InputStreamReader(in)); String firstLine = br.readLine();//读取第一行,且第一行是分隔符号 String fileName = br.readLine(); fileName = fileName.substring(fileName.lastIndexOf("\\")+1);// bafasd.txt" fileName = fileName.substring(0,fileName.length()-1); br.readLine(); br.readLine(); String data = null; //获取当前项目的运行路径 String projectPath = getServletContext().getRealPath("/up"); PrintWriter out = new PrintWriter(projectPath+"/"+fileName); while((data=br.readLine())!=null){ if(data.equals(firstLine+"--")){ break; } out.println(data); } out.close(); } } 3、使用apache-fileupload处理文件上传 框架:是指将用户经常处理的业务进行一个代码封装。让用户可以方便的调用。 目前文件上传的(框架)组件: Apache----fileupload - Orialiy – COS – 2008() - Jsp-smart-upload – 200M。 用fileupload上传文件: 需要导入第三方包: Apache-fileupload.jar – 文件上传核心包。 Apache-commons-io.jar – 这个包是fileupload的依赖包。同时又是一个工具包。 核心类: DiskFileItemFactory – 设置磁盘空间,保存临时文件。只是一个具类。 ServletFileUpload , 文件上传的核心类,此类接收request,并解析reqeust。 servletfileUpload.parseRequest(requdest) - List 一个FileItem就是一个标识的开始:---------243243242342 到 ------------------245243523452—就是一个FileItem 第一步:导入包 第二步:书写一个servlet完成doPost方法 /** * DiskFileItemFactory构造的两个参数 * 第一个参数:sizeThreadHold - 设置缓存(内存)保存多少字节数据,默认为10K * 如果一个文件没有大于10K,则直接使用内存直接保存成文件就可以了。 * 如果一个文件大于10K,就需要将文件先保存到临时目录中去。 * 第二个参数 File 是指临时目录位置 * */ public class Up2Servlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTf-8"); //获取项目的路径 String path = getServletContext().getRealPath("/up"); //第一步声明diskfileitemfactory工厂类,用于在指的磁盘上设置一个临时目录 DiskFileItemFactory disk = new DiskFileItemFactory(1024*10,new File("d:/a")); //第二步:声明ServletFileUpoload,接收上面的临时目录 ServletFileUpload up = new ServletFileUpload(disk); //第三步:解析request try { List list = up.parseRequest(req); //如果就一个文件 FileItem file = list.get(0); //获取文件名,带路径 String fileName = file.getName(); fileName = fileName.substring(fileName.lastIndexOf("\\")+1); //获取文件的类型 String fileType = file.getContentType(); //获取文件的字节码 InputStream in = file.getInputStream(); //声明输出字节流 OutputStream out = new FileOutputStream(path+"/"+fileName); //文件copy byte[] b = new byte[1024]; int len = 0; while((len=in.read(b))!=-1){ out.write(b,0,len); } out.close(); long size = file.getInputStream().available(); //删除上传的临时文件 file.delete(); //显示数据 resp.setContentType("text/html;charset=UTf-8"); PrintWriter op = resp.getWriter(); op.print("文件上传成功
文件名:"+fileName); op.print("
文件类型:"+fileType); op.print("
文件大小(bytes)"+size); } catch (Exception e) { e.printStackTrace(); } } } 4、上传多个文件 第一步:修改页面的表单为多个input type=”file”
File1:
File2:
第二步:遍历list public class Up3Servlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String path = getServletContext().getRealPath("/up"); //声明disk DiskFileItemFactory disk = new DiskFileItemFactory(); disk.setSizeThreshold(1024*1024); disk.setRepository(new File("d:/a")); //声明解析requst的servlet ServletFileUpload up = new ServletFileUpload(disk); try{ //解析requst List list = up.parseRequest(request); //声明一个list封装上传的文件的数据 List> ups = new ArrayList>(); for(FileItem file:list){ Map mm = new HashMap(); //获取文件名 String fileName = file.getName(); fileName = fileName.substring(fileName.lastIndexOf("\\")+1); String fileType = file.getContentType(); InputStream in = file.getInputStream(); int size = in.available(); //使用工具类 FileUtils.copyInputStreamToFile(in,new File(path+"/"+fileName)); mm.put("fileName",fileName); mm.put("fileType",fileType); mm.put("size",""+size); ups.add(mm); file.delete(); } request.setAttribute("ups",ups); //转发 request.getRequestDispatcher("/jsps/show.jsp").forward(request, response); }catch(Exception e){ e.printStackTrace(); } } } 5、动态上传多个文件 核心问题: 在页面上应该可以控制多少。 第一步:用table的格式化
File:

6、解决文件的重名的问题 实现上传图片且直接显示,功能。 package cn.itcast.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FileUtils; public class UpImgServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String path = getServletContext().getRealPath("/up"); DiskFileItemFactory disk = new DiskFileItemFactory(1024*10,new File("d:/a")); ServletFileUpload up = new ServletFileUpload(disk); try{ List list = up.parseRequest(request); //只接收图片*.jpg-iamge/jpege.,bmp/imge/bmp,png, List imgs = new ArrayList(); for(FileItem file :list){ if(file.getContentType().contains("image/")){ String fileName = file.getName(); fileName = fileName.substring(fileName.lastIndexOf("\\")+1); //获取扩展 String extName = fileName.substring(fileName.lastIndexOf("."));//.jpg //UUID String uuid = UUID.randomUUID().toString().replace("-", ""); //新名称 String newName = uuid+extName; FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path+"/"+newName)); //放到list imgs.add(newName); } file.delete(); } request.setAttribute("imgs",imgs); request.getRequestDispatcher("/jsps/imgs.jsp").forward(request, response); }catch(Exception e){ e.printStackTrace(); } } }
/
本文档为【java完成文件的上传[欣赏]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索