java实现的上传.doc_第1页
java实现的上传.doc_第2页
java实现的上传.doc_第3页
java实现的上传.doc_第4页
java实现的上传.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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);/返回的是nullSystem.err.println(txt is :+txt);System.err.println(=);InputStream in = req.getInputStream();/byte b= new byte1024;/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.txtfileName = 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);/第三步:解析requesttry 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);/文件copybyte b = new byte1024;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”form action= method=post enctype=multipart/form-data File1: File2: 第二步:遍历listpublic class Up3Servlet extends HttpServlet public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException request.setCharacterEncoding(UTF-8);String path = getServletContext().getRealPath(/up);/声明diskDiskFileItemFactory disk = new DiskFileItemFactory();disk.setSizeThreshold(1024*1024);disk.setRepository(new File(d:/a);/声明解析requst的servletServletFileUpload up = new ServletFileUpload(disk);try/解析requstList list = up.parseRequest(request);/声明一个list封装上传的文件的数据ListMap ups = new ArrayListMap();for(FileItem file:list)遍历所有的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的格式化 form name=xx action= method=post enctype=multipart/form-data File: 删除 function _add() var tb = document.getElementById(tb); /写入一行 var tr = tb.insertRow(); /写入列 var td = tr.insertCell();一行一列。 /写入数据 td.innerHTML=File:; /再声明一个新的td var td2 = tr.insertCell(); /写入一个input td2.innerHTML=删除; function _del(btn) var tr = btn.parentNode.parentNode; /alert(tr.tagName); /获取tr在table中的下标 var index = tr.rowIndex; /删除 var tb = document.getElementById(tb); tb.deleteRow(index); function _submit() /遍历所的有文件 var files = document.getElementsByName(file); if(files.length=0) alert(没有可以上传的文件); return false; for(var i=0;ifiles.length;i+) if(filesi.value=) alert(第+(i+1)+个文件不能为空); return false; document.formsxx.submit(); 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 mons.fileupload.FileItem;import mons.fileupload.disk.DiskFileItemFactory;import mons.fileupload.servlet.ServletFileUpload;import mons.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);ServletFileUpl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论