HTTP 輸出響應內容工具類
阿新 • • 發佈:2019-02-14
下載文件 工具類 color import jackson bin .data param abi
ResponseUtils.java
package javax.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URLEncoder; import javax.servlet.http.HttpServletResponse; import com.fasterxml.jackson.databind.ObjectMapper;/** * HTTP 輸出響應內容工具類 * * @author Logan * @createDate 2019-02-13 * @version 1.0.0 * */ public class ResponseUtils { /** * 發送HTTP響應信息 * * @param response HTTP響應對象 * @param message 信息內容 * @throws IOException 拋出異常,由調用者捕獲處理 */ public static void write(HttpServletResponse response, String message) throwsIOException { response.setContentType("text/html;charset=UTF-8"); try ( PrintWriter writer = response.getWriter(); ) { writer.write(message); writer.flush(); } } /** * 發送HTTP響應信息,JSON格式 * * @param response HTTP響應對象 *@param message 輸出對象 * @throws IOException 拋出異常,由調用者捕獲處理 */ public static void write(HttpServletResponse response, Object message) throws IOException { response.setContentType("application/json;charset=UTF-8"); ObjectMapper mapper = new ObjectMapper(); try ( PrintWriter writer = response.getWriter(); ) { writer.write(mapper.writeValueAsString(message)); writer.flush(); } } /** * 下載文件 * * @param response HTTP響應對象 * @param message 輸出對象 * @throws IOException 拋出異常,由調用者捕獲處理 */ public static void write(HttpServletResponse response, File file) throws IOException { String fileName = file.getName(); try ( OutputStream out = response.getOutputStream(); FileInputStream in = new FileInputStream(file); ) { // 對文件名進行URL轉義,防止中文亂碼 fileName = URLEncoder.encode(fileName, "UTF-8"); // 空格用URLEncoder.encode轉義後會變成"+",所以要替換成"%20",瀏覽器會解碼回空格 fileName = fileName.replace("+", "%20"); // "+"用URLEncoder.encode轉義後會變成"%2B",所以要替換成"+",瀏覽器不對"+"進行解碼 fileName = fileName.replace("%2B", "+"); response.setContentType("application/x-msdownload;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); byte[] bytes = new byte[4096]; int len = -1; while ((len = in.read(bytes)) != -1) { out.write(bytes, 0, len); } out.flush(); } } }
.
HTTP 輸出響應內容工具類