解決Google瀏覽器檔案上傳fakepath問題,
前段時間在實現一個檔案上傳功能時發現Google等主流瀏覽器會出於安全考慮將上傳檔案的地址換為fakepath。比如c盤的某個檔案,無論其原先處於哪個檔案之下。在上傳之後其會自動變為C\fakepath\檔案名稱字。
解決方案如下:
前台form表單提交檔案
<form name="Form2" action="/Import/ImportExcel" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="upload"/> </form>
後台controller層擷取檔案並將其上傳至E盤,檔案名稱轉換成時間戳記以便區分
@Controller@RequestMapping("Import")public class ReadExcelController { @Autowired private EmployeeService EmployeeService; /** * * @Description: 匯入Excel檔案 * @return */ @RequestMapping("ImportExcel" ) @ResponseBody public boolean readExcel(@RequestParam("file") CommonsMultipartFile file) throws IOException { ImportExcelUtil importExcelUtil = new ImportExcelUtil(); String path="E:/"+new Date().getTime()+file.getOriginalFilename(); File newFile=new File(path); file.transferTo(newFile); List<Map<String,String>> list = importExcelUtil.readExcel(newFile); List<Map<String,Object>> busiID = EmployeeService.quarryBusiId(); Map<Object,Object> map=new HashMap<>(); for(int j=0;j<busiID.size();j++){ map.put(busiID.get(j).get("busi_id"),1); } List<Employee> employeeList =new ArrayList<>(); for(int i = 0;i<list.size();i++){ Employee employee = new Employee(); if(list.get(i).get("cell13") == null || "".equals(employee.getBusiId())){ continue; } if (map.get(list.get(i).get("cell13")) != null){ continue; } employee.setBusiId(list.get(i).get("cell13")); employee.setEmpId(list.get(i).get("cell1")); employee.setEmpName(list.get(i).get("cell2")); employee.setClassName(list.get(i).get("cell4")+list.get(i).get("cell3")); employee.setDeptName(list.get(i).get("cell4")); employee.setTranType(list.get(i).get("cell6")); employee.setTranName(list.get(i).get("cell7")); employee.setPostClass(list.get(i).get("cell8")); employee.setPostName(list.get(i).get("cell9")); employeeList.add(employee); } for(int i=0;i<employeeList.size();i++){ EmployeeService.insert(employeeList.get(i)); } return true; }}
也就是說繞過檔案的原地址,直接將檔案上傳到一個固定的地址以便調用。當然這隻是測試方法,後期可以直接上次到伺服器。
查看評論