easyPoi處理檔案下載檔名為空問題----請求頭資訊
阿新 • • 發佈:2018-10-31
導包:同上一篇匯出封裝請求引數
定義註解:
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import java.lang.annotation.*; /** * 匯出Excel註解. */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface ExportExcel { // 匯出檔名. String fileName(); // Excel型別.預設03、07格式. ExcelType excelType() default ExcelType.HSSF; }
定義切面方法:匹配註解進行切面環繞設定請求頭資訊
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import com.ahies.system.sso.annotation.ExportExcel; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; /** * 匯出Excel切面. * * @author Hohn */ @Aspect @Order @Component public class ExcelExportAspect { @Around(value = "@annotation(excel)") public Object processTx(ProceedingJoinPoint joinPoint, ExportExcel excel) throws Throwable { Object[] args = joinPoint.getArgs(); // Http請求. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); // Http響應. HttpServletResponse response = null; // 最終的檔名(處理中文相容問題). String finalFileName = excel.fileName(); // 檔案字尾名. String suffix = excel.excelType().equals(ExcelType.HSSF) ? ".xls" : ".xlsx"; for (int i = 0; i < args.length; i++) { final String userAgent = request.getHeader("USER-AGENT"); // IE瀏覽器(IE11特殊處理). if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "rv:11")) { finalFileName = URLEncoder.encode(excel.fileName(), "UTF8"); } // Google,火狐瀏覽器 else if (StringUtils.contains(userAgent, "Mozilla")) { finalFileName = new String(excel.fileName().getBytes(), "ISO8859-1"); } // 其他瀏覽器. else { finalFileName = URLEncoder.encode(excel.fileName(), "UTF8"); } if (args[i] instanceof HttpServletResponse) { response = (HttpServletResponse) args[i]; // 告訴瀏覽器用什麼軟體可以開啟此檔案. response.setHeader("content-Type", "application/vnd.ms-excel"); // 下載檔案的預設名稱. response.setHeader("Content-Disposition", "attachment;filename=" + finalFileName + suffix); // 編碼. response.setCharacterEncoding("UTF-8"); } } Object result = null; try { result = joinPoint.proceed(); } catch (Throwable e) { e.printStackTrace(); } return result; } }