jersey 檔案下載中文檔名處理
範例程式碼如下
@GET
@Path("/File")
@Produces(MediaType.APPLICATION_OCTET_STREAM + "; charset=UTF-8")
public Response downloadFile(
@QueryParam("FileName") String FileName,
@QueryParam("FilePath") String FilePath,
@Context HttpServletRequest request
) throws IOException {
//依據瀏覽器的不同,檔名需要不同的編碼
if (request.getHeader("User-Agent").indexOf("MSIE") != -1) {
// IE 8 9 10
FileName = java.net.URLEncoder.encode(FileName, "UTF-8");
} else if (request.getHeader("User-Agent").indexOf("Trident") != -1) {
//IE11
FileName = java.net.URLEncoder.encode(FileName, "UTF-8");
} else {
//其他瀏覽器中文檔名處理
FileName = java.net.URLDecoder.decode(FileName, "UTF-8");
FileName = new String(FileName.getBytes("UTF-8"), "ISO8859-1");
}
//取得檔案
File f = new File(Setting.SERVER_FILE_PATH + "/files/" + FilePath);
//抓取檔案Mimetype
String mt = new MimetypesFileTypeMap().getContentType(f);
//將檔案設定在回傳的資料內
Response.ResponseBuilder response = Response.ok(f, mt);
//設定檔名
response.header("Content-Disposition", "attachment; filename=\"" + FileName + "\"");
//建立回傳資料
return response.build();
}
留言
張貼留言