文件上传upload
2017-10-07 00:00
113 查看
一、html页面
二、servlet处理
package com.lyd.servlet; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.Iterator; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; public class UploadServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置编码的格式 resp.setContentType("text/html;charset=UTF-8"); //获取页面传进来的参数 /*String name = req.getParameter("name"); String age = req.getParameter("age"); String file = req.getParameter("file"); //设置了编码过滤器则可以不要下面的设置 //注意此处 //name=new String(name.getBytes("ISO8859-1"),"UTF-8"); //file=new String(file.getBytes("ISO8859-1"),"UTF-8"); resp.getWriter().println("name:"+name+"<br>age:"+age+"<br>file:"+file); */ //文件的上传与下载,都会以流的形式进行,所以需要写一个方法进行流的处理 //proStream(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置编码的格式 req.setCharacterEncoding("UTF-8"); //只能在请求中调用 proStream(req,resp); } //采用apach组建获取文件方法 private void proStream(HttpServletRequest req, HttpServletResponse resp) throws IOException, IllegalStateException, ServletException { //设置响应对象的编码 resp.setContentType("text/html;charset=UTF-8"); /*//创建流通道 ServletInputStream is=req.getInputStream(); //定义一个字节数组 byte[] arr=new byte[1024]; //定义一个标签接收值 int flag=0; //循环读取数据 while((flag=is.readLine(arr, 0, 1024))!=-1) { //将读取的字节转换为字符串,通过字符串提供的构造方法(读取的字节数组,从0下标开始,读取的字节数为止) String line=new String(arr,0,flag); //通过响应对象读取的字符串显示在页面上 resp.getWriter().write(line+"<br>"); } //关闭流通到 is.close();*/ //第二种方法 //获取参数 String name = req.getParameter("name"); String age = req.getParameter("age"); //显示在页面上 resp.getWriter().write("<strong>name:"+name+"<br>age:"+age+"</strong>"); Part part = req.getPart("file"); // String filename = part.getName(); // resp.getWriter().write("<br/>filename:"+filename); // System.out.println(filename); //得到文件的名称,重新定义一个方法 /*String fileName=getFileName(part); resp.getWriter().write("<br/>fileName:"+fileName+"<br/>"); //获取文件的内容 //创建流通道 InputStream is=part.getInputStream(); //定义一个字节数组 byte[] arr=new byte[1024]; //定义一个标签接收值 int flag=0; //循环读取数据 while((flag=is.read(arr, 0, 1024))!=-1) { //将读取的字节转换为字符串,通过字符串提供的构造方法(读取的字节数组,从0下标开始,读取的字节数为止) String line=new String(arr,0,flag); //通过响应对象读取的字符串显示在页面上 resp.getWriter().write(line+"<br/>"); } //关闭流通到 is.close();*/ //将上传的文件保存在服务器中 //定义一个新的方法进行数据处理 saveUpload(part); //做一个文件上传的提示 resp.getWriter().write("<strong>文件上传成功</strong"); } //定义一个方法用来获取文件的名称 private String getFileName(Part part) { //测试部分,得到头的信息,从而获得文件名 // Iterator<String> it = part.getHeaderNames().iterator(); // while(it.hasNext()) { // String name = it.next(); // //根据名字得到头的名称,是键值对的形式 // System.out.println(name+":"+part.getHeader(name)); // } //根据上面的测试,获取文件信息部分 String header = part.getHeader("content-disposition"); //分割和获取文件的信息 String[] str=header.split("filename="); //把字符串数组转换为数组的字符串,用于显示的测试 //System.out.println(Arrays.toString(str)); //获取信息 //System.out.println(str[str.length-1].replace("\"", "")); return str[str.length-1].replace("\"", ""); } /** * 获取上传文件的名称 * 获取应用程序的真实路径 * 创建文件夹进行数据的保存,此处需要判断 * @param part */ //保存文件在服务器的方法 private void saveUpload(Part part) { //获取上传文件的名称 String fileName = getFileName(part); //文件名相同,文件内容不同解决方法(定义不同的文件名) //System.nanoTime()系统的数,或者加一个uuid修饰 fileName="lyd_"+System.nanoTime()+"_"+fileName; //获取应用程序的真实路径,用代码进行实现 //首先获取Servlet上下文路径的对象 ServletContext sc = getServletContext(); String realPath = sc.getRealPath("File.separator"); //String realPath = sc.getRealPath("/"); System.out.println(realPath); //创建保存路径,保存路径在upload下面 File file=new File(realPath+"upload"); //如果文件不存在,需要提前进行创建 if(!file.exists()) { //创建文件 file.mkdirs(); } //构建新的保存文件(文件路径,文件名) File upFile=new File(file,fileName); //得到文件的输入流 InputStream fis=null; byte[] arr=new byte[1024]; int flag=0; //得到文件的输出流 FileOutputStream fos=null; try { fos=new FileOutputStream(upFile); fis=part.getInputStream(); while((flag=fis.read(arr, 0, 1024))!=-1) { //将读取的字节写入指定的文件中 fos.write(arr, 0, flag); } }catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally { //先关闭输出流 if(fos!=null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } //再关闭输出流 if(fis!=null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
相关文章推荐
- commons fileupload 文件上传乱码问题解决方案 + request.getParameter无法得到参数问题
- javaWeb文件以及图片上传smartupload工具类的使用
- 一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
- Spring + Open Feign upload file 文件上传
- elemetUi 组件--el-upload实现上传Excel文件的实例
- jquery-file-upload限制文件上传大小和文件个数
- commonFileUpload处理上传文件和HTTP文件上传协议
- ajaxFileUpload+struts2实现多文件上传(动态添加文件上传框)
- spring mvc CommonsMultipartResolver文件上传maxUploadSize限制大小
- OpenResty文件上传upload
- FTP+SpringMVC+Uploadify实现带进度条多文件上传
- Webupload+PHP上传大文件
- 在jsp中使用smartupload组件上传文件- -
- Web开发之JspSmartUpload实现文件上传下载
- SpringMVC+ajaxfileupload+ajax文件上传
- 关于uploadifive 文件上传时出现406错误解决办法
- jquery uploadify插件多文件上传
- 大文件上传NeatUpload简单用法
- 纯PHP上传 ,带进度显示 ,Linux下安装 PHP文件上传扩展,uploadprogress的安装
- java的jap页面上文件上传,所需jar包:jspSmartUpload.jar