JSP的文件上传和下载

来源:互联网 发布:2017年四川省大数据 编辑:程序博客网 时间:2024/06/05 08:37
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>My JSP '1.jsp' starting page</title>    <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->  </head>    <body> <form enctype="multipart/form-data" action="<%=path %>/2.jsp" method="post">    文件名:<input  type="text" name="uname"/>   选择图片: <input  type="file"  name="myfile"/>   <input type="submit" value="提交"/>    </form>   <a href="Servlet?filename=/s.jpg ">下载文件</a>  ${errorResult}   </body></html>文件上传必须使用type="file"这个类型的

<%@page import="org.apache.commons.fileupload.FileItemFactory"%><%@page import="java.io.File"%><%@page import="org.apache.commons.fileupload.FileItem"%><%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>

 <%

   //解决乱码问题

   request.setCharacterEncoding("utf-8");

   //判断请求信息中的内容是否是"multipart/form-data"类型

   boolean flag=ServletFileUpload.isMultipartContent(request);

   if(flag){

   //找到一个解析器,解析请求中的各个项目

   //工厂参数是一个接口,用他的实现类

   FileItemFactory  factory=new DiskFileItemFactory();

   //如果要解析,必须借助工厂参数

   ServletFileUpload  upload=new  ServletFileUpload(factory);

   //使用parseRequest  返回一个类型为FileItemlist集合

   List<FileItem> list=upload.parseRequest(request);

   //每一个fileitem都代表一个表单元素

   //使用迭代器迭代

   Iterator<FileItem>  iter=list.iterator();

   //使用while循环进行逐项迭代

   //iter.hasNext()判断下一个有没有元素

   while(iter.hasNext()){

   //如果下一个不为空

      FileItem  item= iter.next();

      if(item!=null){

      //对当前item进行判断看是普通的还是上传用的

      boolean bool=item.isFormField();

      if(bool){//证明是普通表单

      //获取该表单的value

      String name=item.getFieldName();//返回表单元素的name

      if(name.equals("uname")){

      out.print(item.getString("utf-8"));

      }

      }else{//是一个上传文件域

      String  fname=item.getName();//上传文件域的文件名

      //扔到服务器目录下

      String path="/upload/";//文件上传不能使用相对路径

      //转换为绝对路径

      path=this.getServletContext().getRealPath(path);

      //构建一个file对象,借助File对象的getname方法

      File file=new File(fname);

      //构建一个file对象  第一个参数父路径    第二个参数子路径  

      File ffile=new File(path,file.getName());

      item.write(ffile);

      out.print("上传成功");

      }

      }

   }

   }

   %>  

这里是文件上传 
下面是文件下载
package cn.happy;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.corba.se.spi.orbutil.fsm.Input;public class Servlet extends HttpServlet {/**苏小白 */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}/**苏小白 */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String path=getServletContext().getRealPath("/")+"/upload/";String filename=request.getParameter("filename");File file=new File(path+filename);if(file!=null){response.setContentType("application/x-msdownload");response.setHeader("Content-Disposition", "attachment;filefilename=\""+filename+"\"");InputStream inputStream=new FileInputStream(file);ServletOutputStream sops=response.getOutputStream();byte b[]=new byte[1024];int n;while((n=inputStream.read(b))!=-1){sops.write(b,0,n);}sops.close();inputStream.close();}else{request.setAttribute("errorResult", "文件不存在或加载失败");request.getRequestDispatcher("/1.jsp").forward(request, response);}}}