MultipartHttpServletRequest,ajaxFileUpload上傳檔案,讀取檔案亂碼問題
阿新 • • 發佈:2018-12-11
@RequestMapping(value = "/uploadOrgid", method = RequestMethod.POST, produces = "text/html;charset=UTF-8") @ResponseBody public String uploadOrgid(Model model, MultipartHttpServletRequest multipartRequest,HttpServletResponse response) throws Exception { MessageBean mess = new MessageBean(); StringBuffer str = new StringBuffer(); for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) { String key = (String) it.next(); MultipartFile file = multipartRequest.getFile(key); try { InputStream ins = file.getInputStream(); BufferedInputStream bfs = new BufferedInputStream(ins); String code = codeString(bfs); InputStream insm = file.getInputStream(); //InputStreamReader 要用insm沒有去查詢過編碼的 InputStream 才行,如果用ins 讀不到資料 InputStreamReader in = new InputStreamReader(insm,code); BufferedReader reader = new BufferedReader(in); String tempString = null; // 一次讀入一行,直到讀入null為檔案結束 while ((tempString = reader.readLine()) != null) { str.append(tempString.trim()).append(","); } reader.close(); } catch (IOException e) { logger.error(e.getMessage()); mess.setCode("500"); mess.setContent("讀取商戶號失敗"); return gson.toJson(mess); } } if (str.length() > 0) { str.deleteCharAt(str.length() - 1); } mess.setCode("200"); mess.setContent(str.toString()); return gson.toJson(mess); } /** * 判斷檔案的編碼格式 * @param fileName :file * @return 檔案編碼格式 * @throws Exception */ private String codeString(BufferedInputStream bin) throws Exception{ int p = (bin.read() << 8) + bin.read(); String code = null; switch (p) { case 0xefbb: code = "UTF-8"; break; case 0xfffe: code = "Unicode"; break; case 0xfeff: code = "UTF-16BE"; break; default: code = "GBK"; } return code; }