文件上傳下載_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();
        }


    }
}


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