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();
  }

留言

這個網誌中的熱門文章

[java]半型轉全型

[java]BIG5 字集判斷

[javascript]當月第一天、當月最後一天