上传和下载

上传和下载,第1张

上传和下载


1.上传核心原理(重点)

1.1.jsp注意点(背会)

(1)form表单请求方式为POST请求

(2)form的enctype属性值为“multipart/form-data”
(含义:设置表单的类型为文件上传表单)

(3)获取文件通过type属性值file

(4)上传文件务必设置name属性值

1.2.servlet注意点(背会)

(1)通过getPart()方法获取Part对象

Part part = request.getPart("myfile");

(2)通过getSubmittedFileName()方法获取上传的文件名

String fileName = part.getSubmittedFileName();
System.out.println("上传文件名:"+fileName);

(3)获取上传文件存放的路径

String filePath = request.getServletContext().getRealPath("/");
System.out.println("文件存放的路径:"+filePath);

上下文

(4)将文件上传到指定位置

part.write(filePath+"/"+fileName);

2.上传实战

2.1 配置tomcat8

2.2 创建工程,并导入tomcat8中的servlet和jsp的jar包

2.3 创建upload.jsp

       

2.4 创建UpServlet(省略导包)

使用注解@MultipartConfig
将一个Servlet标识为支持文件上传

@MultipartConfig //有这个注解别忘了
public class UpServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置字符集
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //2.获取上传者
        String uname = request.getParameter("uname");
        System.out.println("上传者:" + uname);
        //3.获取part对象
// Servlet3.0将multipart/form-data的POST请求封装成Part对象,通过Part对象完成上传文件的 *** 作,
//但是它没有提供直接获取文件名的方法,需要通过Part对象从请求中解析出来
        Part part = request.getPart("myfile");
        //4.获取文件名
        String fileName = part.getSubmittedFileName();
        System.out.println("文件名:"+fileName);
        //5.获取上传文件路径
        String filePath = request.getServletContext().getRealPath("/");
	 //当前绝对路径
        //是根据上面这个路径来进行传到哪
        System.out.println("上传的路径:"+filePath);
        //6.上传文件到指定位置
        String locationUrl = filePath + "/" +fileName;
        part.write(locationUrl);
//        传入一个保存文件的绝对路径,即可保存上传的文件
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

javax.servlet.ServletContext接口(摘录)
Servlet上下文具有名字(它属于Web应用的名字)唯一映射到文件系统的一个目录。
Web应用中servlet可以使用servlet上下文得到:
1.在调用期间保存和检索属性的功能,并与其他servlet共享这些属性。
2.读取Web应用中文件内容和其他静态资源的功能。
3.互相发送请求的方式。
4.记录错误和信息化消息的功能。

ServletContext接口中的方法:
String getRealPath(String path)
给定一个URI,返回文件系统中URI对应的绝对路径。
如果不能进行映射,返回null。

2.5 web.xml


  Archetype Created Web Application
    
        UpServlet
        cn.kgc.servlet.UpServlet
    

        UpServlet
        /UpServlet
    

2.6测试上传

3.下载核心原理

3.1 jsp注意点

(1)测试不输入参数的校验

(2)测试输入错误参数的校验

(3)测试输入正确参数的校验

3.2 servlet注意点

(1)参数的非空校验,去除字符串的前后空格

if(name==null || “”.equals(name.trim())){
response.getWriter().write(“请输入要下载的文件名”);
//关闭流
response.getWriter().close();
//退出程序
return;
}

(2)获取文件下载路径

String path = getServletContext().getRealPath("/");

(3)判断文件是否存在并且是一个标准文件

file.exists() && file.isFile()

(4)下载文件
ServletOutputStream os = response.getOutputStream();

4.下载实战

4.1创建download.jsp

  
    

4.2创建DownServlet
(导包省略啊)

public class DownLoadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置字符集
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //2.利用name对应的value值为fileName的值,获取选择的文件名称
        String fileName = request.getParameter("fileName");
        //3.校验判空,并去除前后空格
        if (fileName == null || "".equals(fileName.trim())){
//            trim() 方法用于删除字符串的头尾空白符。
            response.getWriter().write("请输入要下载的文件名称");
            //4.关闭资源
            response.getWriter().close();
            //5.退出程序
            return;
        }
        //6.获取文件下载路径
        String path = getServletContext().getRealPath("/");
        //7.构建文件全路径
        File file = new File(path + fileName);
        //8.校验2:判断文件是否存在
        if (file.exists() && file.isFile()){
            //校验三:
            //9.设置Content-Type头字段的值
            response.setContentType("application/x-msdownload");
            //10.设置Header
            response.setHeader("Content-Disposition","attachment;filename=" + fileName);
            //11.实例化文件流,读取文件
            FileInputStream is = new FileInputStream(file);
            //12.写出文件
            ServletOutputStream os = response.getOutputStream();
            //13.定义数组,并通过流的方式将数据写出到文件中
            byte[] array = new byte[1024];
            int len = 0;
            while ((len = is.read(array))!= -1){
                os.write(array,0,len);
            }
        }else {
            response.getWriter().write("文件不存在,请重新输入!");
            //(1).关闭资源
            response.getWriter().close();
            //(2).退出程序
            return;
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

4.3 web.xml


    DownLoadServlet
    cn.kgc.servlet.DownLoadServlet


    DownLoadServlet
    /DownLoadServlet


在上面的上传里放中间 (maven中)不然可能就报错

4.4测试下载
注意一:
http://localhost:8080/download.jsp

如果为空,或者空格,就会出现下面的
请输入要下载的文件名称

注意二:
http://localhost:8080/upload.jsp

然后http://localhost:8080/download.jsp
文件名没输对

文件不存在,请重新输入!

正确时,就会进行下载:

题外话:
1 << 3 ==》 1 * 2^3
左移一位后最右位补0,移几位补几个0;
结果:二进制1000 十进制8

----2021.11.19

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5563775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存