JSP之文件的上传下载

JSP的文件上传下载

  1. input的type设置为file
  2. form表单的method设置为post,get请求会将文件名传给服务端,而不是文件本身。
  3. form表单的enctype设置multipart/form-data,以二进制的形式传输数据

upload.jsp

<form enctype="multipart/form-data" action="/upload" method="post">
    <input  type="text" name="text1"    />
    <input  type="file" name="text2"    />
    <input  type="file" name="text3"    />
    <input type="submit" value="上传文件">
</form>

servlet中最初接收文件上传下载的流程:

@WebServlet("/upload")
public class Upload_Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("UTF-8");
            //输入流用于接收文件
            InputStream inputStream = req.getInputStream();
            Reader reader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(reader);
            
            //输出流用于书写文件
            //通过req获取发布项目的具体位置
            String path = req.getServletContext().getRealPath("file/my_Try.txt");
            OutputStream outputStream = new FileOutputStream(path);
            Writer writer = new OutputStreamWriter(outputStream);
            BufferedWriter bufferedWriter = new BufferedWriter(writer);
            //此处通过字符进行接收,若采用字节可通过 int temp=0;等进行
            String temp = null;
            while((temp=bufferedReader.readLine())!=null)
            {
                bufferedWriter.write(temp);
                System.out.println(temp);
            }
            //关闭输入输出流
            bufferedWriter.close();
            writer.close();
            outputStream.close();
            bufferedReader.close();
            reader.close();
            inputStream.close();
    }

后来可以通过用fileupload组件将所有的请求信息解析为FileItem 对象,通过对该对象的操作完成上传,面向对象的思想。

额外需要配置

在这里插入图片描述
在这里插入图片描述
采用FileItem 对象上传

package com.Chase.My_Servlet;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;

@WebServlet("/upload")
public class Upload_Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            req.setCharacterEncoding("UTF-8");
            DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
            ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
            List<FileItem> list = servletFileUpload.parseRequest(req);//通过serlvetFileUpload不使用 req.getInputStream()进行操作

            for(FileItem fileItem : list) {
                if(fileItem.isFormField()){
                    String name =  fileItem.getFieldName();//对应的框名
                    String value = fileItem.getString("UTF-8");//设置对应的获取文本格式
                    System.out.println(name+":"+value);
                }else{
                    String filename = fileItem.getName();//对应的 属性名
                    InputStream inputStream = fileItem.getInputStream();//创建上传对象的输入流
                    String path  = req.getServletContext().getRealPath("file/"+filename);//服务器对应地址
                    OutputStream outputStream = new FileOutputStream(path);//服务器对应地址的输出流
                    int temp =0 ;//该处通过字节的方式传输可接收空格
                    while((temp =  inputStream.read())!=-1)
                    {
                        outputStream.write(temp);
                    }
                    outputStream.close();
                    inputStream.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
文件下载

download.jsp

<body>
    <a href="/download?name=1.png">1.png </a>
</body>

download_Servlet

@WebServlet("/download")
public class download_file extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/x-msdownload");//设置响应方式
        String name = req.getParameter("name");
        resp.setHeader("Content-Disposition","attachment;filename="+name);//设置下载之后的文件名(resp)

        String path = req.getServletContext().getRealPath("file/"+name);
        InputStream inputStream = new FileInputStream(path);//服务器下载输入流
        OutputStream outputStream = resp.getOutputStream();//客户端输出(下载)
        int temp =0 ;
        while((temp= inputStream.read())!=-1)
        {
            outputStream.write(temp);
        }
        outputStream.close();
        inputStream.close();
    }
}
文本素材来源于网上教程 和 手动操作, 仅用于个人笔记,如有侵权请联系删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值