文件上传下载_servlet版本

文件上传下载_servlet版本


package com.ssh.common.util;

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.output.WriterOutputStream;
import org.apache.http.HttpRequest;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;

public class FIleUtil {
/**
 * <form method="post" action="/TomcatTest/UploadServlet" enctype="multipart/form-data">
 *  表单必须为post请求,必须设置:enctype="multipart/form-data"
 * @param request
 */

    public void upload(HttpServletRequest request){
        //1,判断是不是multipart请求
        if(!ServletFileUpload.isMultipartContent(request)){
            throw new RuntimeException("当前请求不支持上传文件!");
        }

        try {
            //创建一个FileItem工厂
            DiskFileItemFactory factory=new DiskFileItemFactory();
            //单位:字节, 本例设置边界为1M,大于1M的会创建临时文件,小于1M的会直接写入内存中
            factory.setSizeThreshold(1024*1024*1);
            //设置临时文件
            String temPath=request.getServletContext().getRealPath("/temp");
            File temp=new File(temPath);
            factory.setRepository(temp);

            //创建文件核心上传组件
            ServletFileUpload upload=new ServletFileUpload(factory);
            upload.setFileSizeMax(1024*1024*2);//设置单个文件上传不能超过2M
            upload.setSizeMax(1024*1024*5);//设置上传一次所有文件总和不能超过5M
            upload.setHeaderEncoding("UTF-8");//设置每个item的头部字符编码,其解决文件名称的中文乱码问题
            //解析请求,获取所有的item
            List<FileItem> items=upload.parseRequest(request);
            //遍历items
            for(FileItem item :items){
                //判断item是普通表单项
                if(item.isFormField()){
                    String fieldName=item.getFieldName();//获取表单项名称
                    String fieldValue=item.getString("UTF-8");//获取表单项的值,解决文本框输入中文乱码问题
                }else{//是文件表单项
                    String fileName=item.getName();//获取上传文件原始名称
                    InputStream in=item.getInputStream();
                    String path=request.getServletContext().getRealPath("/upload");//获取文件保存在服务器的路径
                    File descFile=new File(path,fileName);
                    OutputStream out=new FileOutputStream(descFile);
                    byte[] buff=new byte[1024];
                    int len=0;
                    while ((len=in.read(buff))>0){
                        out.write(buff,0,len);
                    }
                    in.close();
                    out.close();
                    item.delete();//删除中间过渡的临时文件
                }

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

        } finally {
        }
    }


    public void downLoad(HttpServletRequest request,HttpServletResponse response){
        String fileName="123.pdf";//下载之后重命名为123.pdf
        try {
            //打散:按当前的字符编码进行打散
            byte[] bytes=fileName.getBytes("UTF-8");
            //组装:按目标字符编码进行组装, 解决文件名为中文乱码问题
            fileName=new String(bytes,"iso-8859-1");
            //修改响应的头部属性content-disposition的值为attachment,下载为附件形式
            response.setHeader("content-disposition","attachment;filename="+fileName);//下载之后重命名为123.pdf
            //response.setContentType("application/vnd.ms-excel");//导出excel需要加上此设置
            InputStream in=request.getServletContext().getResourceAsStream("/resources/aaa.pdf");//服务器上的文件为aaa.pdf
            //获取输出流
            ServletOutputStream out=response.getOutputStream();
            byte[] buff=new byte[1024];
            int len=-1;
            while ((len=in.read(buff))!=-1){
                out.write(buff,0,len);
            }
            in.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章