• JavaWeb文件上传与下载


    <a href="file/DownloadServlet?fileId=QQ图片3.jpg">QQ图片3</a><br>

    当超链接配置了file/路径的时候,response.sendRedirect("tip.jsp")

    会从file路径下找tip.jsp这个文件,因为没有file这个路径所以tip.jsp会找不到。解决的办法是跳转上一级目录response.sendRedirect("../tip.jsp")

    因为在web.xml<url-pattern>/file/DownloadServlet</url-pattern>

    配置的第一条/斜线就代表根目录,跳转到根目录就能找到tip.jsp文件了

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    package com.xzit.servlet;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Date;
    import java.util.List;
    
    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.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    public class FileUploadServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        
        private String uploadSaveDir;
        /**
         * 处理用文件上传请求的核心服务方法
         * @param request 请求对象
         * @param response 响应对象
         */
        protected void service(HttpServletRequest request,HttpServletResponse response) 
                throws ServletException,IOException{
            //上传文件保存的目录
            uploadSaveDir = this.getServletContext().getRealPath("/WEB-INF/uploadFiles/");
            System.out.println("文件保存的真实目录"+uploadSaveDir);
            /* 创建默认属性设置的磁盘文件项工厂对象 */
            DiskFileItemFactory factory = new DiskFileItemFactory();
            System.out.println("默认文件保存的临时目录是 "+System.getProperty("java.io.tmpdir"));
            System.out.println(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
        
            /* 构建ServletFileUpload组件 */
            ServletFileUpload fileUpload = new ServletFileUpload();
            //设置使用的FileItemFactory
            fileUpload.setFileItemFactory(factory);
            /* 设置相关属性 */
            fileUpload.setFileSizeMax(1024*1024*12);
            fileUpload.setSizeMax(1024*1024*12*10);
            fileUpload.setHeaderEncoding("utf-8");
            /* 获取FileItemFactory所有文件项(FileItem) */
            List<FileItem> itemList = null;
            try {
                itemList = fileUpload.parseRequest(request);
                for(FileItem item:itemList) {//遍历List
                    //判断是普通表单字段还是文件组件
                    boolean bool = item.isFormField();
                    if(!bool) {//如果是文件对象则保存到磁盘
                        String fileName = item.getName();    //获取上传文件的真实名称
                        System.out.println("文件名称:"+fileName);
                        System.out.println("字段名称:"+item.getFieldName());
                        System.out.println("文件的大小是:"+item.getSize());
                        System.out.println("文件类型是 "+item.getContentType());
                        File target = new File(uploadSaveDir+new Date().getTime()+fileName);
                        item.write(target);
                    }
                    item.delete();//释放Item内容主体
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
    package com.xzit.servlet;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class DownloadServlet extends HttpServlet {
        private String dir ;//下载文件所在父目录
        protected void service(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException{
            String id = request.getParameter("fileId");//获取下载链接的文件id参数
            dir = getServletContext().getRealPath("/WEB-INF/downloads/");
            
            //建立下载的目标文件
            File target = new File(dir+id);
            InputStream input = null;
            ServletOutputStream output = null;
            if(target.exists()) {
                input = new FileInputStream(target);
                //设置文件临时存储的缓冲区
                byte [] datas = new byte[10240];
                int count = 0;    //读取字节的计数器
                //设置响应头内容,告知浏览器本次响应是文件下载
                response.setHeader("content-disposition", 
                        "attachment;filename="+URLEncoder.encode(target.getName(),"UTF-8"));
                output = response.getOutputStream();//获取响应给客户端的文件输出流
                /* 读取文件到缓冲区,响应发送输出流到客户端浏览器 */
                while((count = input.read(datas, 0, datas.length)) > 0) {
                    output.write(datas, 0, count);//输入到客户端
                }
                output.flush();
                output.close();
                input.close();
            }else {//如果不存在
                response.sendRedirect("../tip.jsp");//定位到提示页面
            }
        }
    
    }
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        
        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
        "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Insert title here</title>
        </head>
        <body>
            <h2>选择文件后点击上传按钮上传您的文件</h2>
            <form action="file/FileUploadServlet" method="post" 
                enctype="multipart/form-data">
                文件一:<input name="file1" type="file"><br>
                文件二:<input name="file2" type="file"><br>
                年龄:<input name="age" type="text" value="23"><br>
                <input type="submit" value="上传">
            </form>
        </body>
    </html> 
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>webFileUpload2</display-name>
      <welcome-file-list>
        <welcome-file>fileUpload.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
          <description></description>
          <display-name>FileUploadServlet</display-name>
          <servlet-name>FileUploadServlet</servlet-name>
          <servlet-class>com.xzit.servlet.FileUploadServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>FileUploadServlet</servlet-name>
          <url-pattern>/file/FileUploadServlet</url-pattern>
      </servlet-mapping>
      
      <servlet>
          <description></description>
          <display-name>DownloadServlet</display-name>
          <servlet-name>DownloadServlet</servlet-name>
          <servlet-class>com.xzit.servlet.DownloadServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>DownloadServlet</servlet-name>
          <url-pattern>/file/DownloadServlet</url-pattern>
      </servlet-mapping>
    
    </web-app>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
        "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Insert title here</title>
        </head>
        <body>
            <h2> 目标文件不存在,无法下载,很抱歉</h2>
        </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Insert title here</title>
        </head>
        <%
            request.setCharacterEncoding("utf-8");
        %>
        <body>
            <h2>资源下载列表</h2>
            <a href="file/DownloadServlet?fileId=QQ图片1.jpg">QQ图片1</a><br>
            <a href="file/DownloadServlet?fileId=QQ图片2.jpg">QQ图片2</a><br>
            <a href="file/DownloadServlet?fileId=QQ图片3.jpg">QQ图片3</a><br>
        </body>
    </html>
  • 相关阅读:
    2017.11.2 JavaWeb----第六章 Servlet技术
    2017.11.1 微型计算机原理与接口技术-----第七章 中断系统与8237A DMA控制器
    2017.10.31 微型计算机组成原理与接口技术------- 第六章 存储器
    2017.10.30 软件工程------ 软件测试
    选择排序
    快速排序(基础版)
    [经验]java 高级面试解析
    [经验]java 高级面试
    链表翻转的图文讲解(递归与迭代两种实现)yet
    手把手教你如何自定义DAO框架(重量级干货)(yet)
  • 原文地址:https://www.cnblogs.com/zengyu1234/p/16015370.html
Copyright © 2020-2023  润新知