在使用Uploadify插件进行文件上传时,当上传的文件名包含中文时,则在后台读取时,会出现乱码问题。之前一直以为是插件自带Flash上传器中的代码没有对中文编码问题进行处理,但经过反复试验发现,与Flash无关。
出现乱码是因为Flash发送数据是以UTF-8的格式进行编码,而后台接受时没有做出处理导致的。下面的代码是后台文件接收的Servlet代码,其中的
- upload.setHeaderEncoding("utf-8");
upload.setHeaderEncoding("utf-8");
即表示使用utf-8的编码格式处理数据,这样一来,上传中文文件名则不会出现乱码问题
- ServletContext servletContext = this.getServletConfig().getServletContext();
- ApplicationContext appContext = WebApplicationContextUtils
- .getWebApplicationContext(servletContext);
- String uploadFolder = (String) req.getParameter("folder");
- String savePath = this.getServletConfig().getServletContext().getRealPath(uploadFolder);
- savePath = savePath + "\\";
- File f1 = new File(savePath);
- if (!f1.exists()){
- f1.mkdirs();
- }
- DiskFileItemFactory fac = new DiskFileItemFactory();
- ServletFileUpload upload = new ServletFileUpload(fac);
- upload.setHeaderEncoding("utf-8");
- List fileList = null;
- try{
- fileList = upload.parseRequest(req);
- } catch (FileUploadException ex){
- return;
- }
- Iterator<FileItem> it = fileList.iterator();
- String name = "";
- String extName = "";
- while (it.hasNext()){
- FileItem item = it.next();
- if (!item.isFormField()){
- name = item.getName();
- long size = item.getSize();
- String type = item.getContentType();
- if (name == null || name.trim().equals("")){
- continue;
- }
- //扩展名格式:.flv
- if (name.lastIndexOf(".") >= 0){
- extName = name.substring(name.lastIndexOf("."));
- }
- File file = null;
- String format = "yyyyMMddHHmmss";
- Random r = new Random();
- do{
- //生成随机文件名:日期+四位随机数
- int rannum = (int) (r.nextDouble() * (9999 - 1000 + 1)) + 1000;
- name = DateUtil.parseString(new Date(), format);
- name = name + rannum;
- file = new File(savePath + name + extName);
- } while (file.exists());
- File saveFile = new File(savePath + name + extName);
- try{
- item.write(saveFile);
- } catch (Exception e){
- e.printStackTrace();
- }
- }
- }
- resp.getWriter().print(name + extName);