Servlet的文件上传与下载

本文介绍了如何使用Servlet处理文件上传和下载操作。在文件上传部分,讲解了Servlet如何接收并存储上传的文件;在文件下载部分,阐述了Servlet如何生成响应以允许用户下载指定的文件。
摘要由CSDN通过智能技术生成
response.setContentType(application.getMimeType("a.jpg"))
response.setHeadr("Content-Disposition","attachment;filename="+filename)
上传需要满足的条件
form 
    enctype="mulltipart/form-data"
    method="post"
    type="file"
  后台流程
    工厂
    解析器
    解析request 遍历 fileItem

文件上传:

package web;
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;
import org.apache.commons.io.FilenameUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws 		 ServletException, IOException {
        DiskFileItemFactory factory=new DiskFileItemFactory();//创建工厂
        ServletFileUpload upload=new ServletFileUpload(factory);//文件解析器
        try {
            List<FileItem> list = upload.parseRequest(request);//解析方法lai 解析 页面发来的数据 存入集合里
            for (FileItem fileItem : list) {
                if(fileItem.isFormField()){//isFormField 判断 isFormField 是不是普通表单 是返回true
                    System.out.println(fileItem.getFieldName()+"==>"+fileItem.getString("utf-8"));
                    			//得到表单标签name的值
                }else {
                    //重新定义文件名  uuid
                    String uuid = UUID.randomUUID().toString().replace("-", "");//去掉uuid里面的-
                    //获取原始文件的后缀 
                    String name = fileItem.getName();//得到文件的名字  aaa.jpg
                    String ext = FilenameUtils.getExtension(name);//得到文件的后缀名 jpg
                    String realPath = getServletContext().getRealPath("/upload");//获取项目所在路径 
                    File file=new File(realPath); //file 流  realPath放进file 判断是否存在
                    if(!file.exists()){//抽象路径名表示的文件或目录是否存在
                        file.mkdirs();//如果不存在就创建
                    }
                    //将上传文件  写入指定服务器目录
                    try {
                        fileItem.write(new File(realPath,uuid+"."+ext));
                        //4将文件名 存入数据库uuid+"."+ext....... 暂时还没写 
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }

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

    }
}

文件下载:

package web;

import utils.FileNameUtil;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

public class DownLoadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    /**
     * 写一个showCode.jsp,里面一个img 点击img可以切换验证码
     * img的src 请求 CheckCodeServlet
     * 由CheckCodeServlet的doGet()方法响应验证码
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //下载图片
        ServletContext servletContext = this.getServletContext();//得到application对象
        String mimeType = servletContext.getMimeType("iu.jpg");//得到类型
        response.setHeader("Content-Type",mimeType);
        //告诉浏览器 类型     filename=李智恩.jpg属性 设置用户下载文件的保存文件名
        String filename = FileNameUtil.encode(request, "李智恩.jpg");//调用工具类 乱码解决
        response.setHeader("content-Disposition","attachment;filename="+filename);
        //设置请求头 告诉浏览器以附件方式下载
        String realPath = servletContext.getRealPath("/uodate/iu.jpg");//获取到项目在服务器的发布路径
        ServletOutputStream outputStream = response.getOutputStream();//得到字节输出流 写入
        FileInputStream fis = new FileInputStream(realPath);
        int temp;
        byte[] b=new byte[1024];
        while ((temp=fis.read(b))!=-1){
            outputStream.write(b,0,temp);
        }
        fis.close();//自己new的流一定要关闭
    }
}

    
@RequestMapping(value="/download")
    public ResponseEntity<byte[]> downloadsEntity(HttpServletRequest request) throws Exception{
        String	path = "D:\\aaa";
        String fileName="21天学通java.jpg";
        File file=new File(path,fileName);
        if(!file.isFile()){
            return null;
        }
        @SuppressWarnings("resource")
        InputStream input=new FileInputStream(file);
        byte[] buff=new byte[input.available()]; // 获取文件大小
        input.read(buff) ;
        HttpHeaders headers=new HttpHeaders();
        headers.add("Content-Disposition", "attachment;filename="+fileName);
        HttpStatus status=HttpStatus.OK;
        ResponseEntity<byte[]> entity=new ResponseEntity<byte[]>(buff,headers,status);
        return  entity;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值