commonfileUpload接收文件以外的参数和中文乱码的问题 jsp接收参数乱码

关于common fileUpload 接收非文件的参数和中文乱码的问题

最近的项目中要用到commonfileUpload 在接收参数时出现了中文乱码,在这里我记录一下,以供后来的人可以少走这个弯路。由于在网上找到的文章好多都是转载的,所以解决这个问题也用了我一个上午的时间。

这里贴出一部分的代码

代码中的一些变量没有定义的是在try{}catch(){}以外定义的。代码中有些不严谨的地方,我并没有修改

  1. try{
  2. StringregExp=".+////(.+)$";//正则匹配,去掉路径取文件名.
  3. Stringerrortype[]={".exe",".com",".cgi",".asp"};
  4. Patternp=Pattern.compile(regExp);
  5. StringuploadPath="D:/image";   //这里我用的是绝对路径,这里可以在web.xml中配置,如果一定要用绝对路径的话
  6. booleanisMultipart=FileUploadBase.isMultipartContent(request);
  7. DiskFileItemFactoryfactory=newDiskFileItemFactory();
  8. factory.setSizeThreshold(1024);
  9. ServletFileUploadupload=newServletFileUpload(factory);
  10. upload.setSizeMax(1024*1024);
  11. upload.setHeaderEncoding("gb2312");   //这里要设置一下,设置成你需要的格式
  12. List<FileItem>fileItem=upload.parseRequest(request);
  13. Iterator<FileItem>it=fileItem.iterator();
  14. while(it.hasNext()){
  15. FileItemfi=it.next();
  16. StringoriFileName=fi.getName();
  17. if(fi.isFormField()){      //在这里判断一下,是否要接收非文件的参数,这里接收的非文件的参数
  18. StringformName=fi.getFieldName();
  19. StringformContent=fi.getString();
  20. formName=newString(formName.getBytes(),"gb2312");//这一句似乎不用也行,没测试
  21. formContent=newString(formContent.getBytes(),"gb2312");//这一句也没有测试,好象不用也行
  22. if(formName.equalsIgnoreCase("categoryId")){
  23. categoryId=Integer.parseInt(formContent);
  24. }elseif(formName.equalsIgnoreCase("goodsName")){
  25. goodsName=formContent;
  26. }elseif(formName.equalsIgnoreCase("price")){
  27. price=Float.parseFloat(formContent);
  28. }elseif(formName.equalsIgnoreCase("salePrice")){
  29. salePrice=Float.parseFloat(formContent);
  30. }elseif(formName.equalsIgnoreCase("description")){
  31. description=formContent;
  32. }elseif(formName.equalsIgnoreCase("isExist")){
  33. isExist=Integer.parseInt(formContent);
  34. }
  35. }
  36. else{//这里接收的是文件的参数。
  37. if(!fi.isFormField()&&(oriFileName!=null)){
  38. Matcherm=p.matcher(oriFileName);
  39. booleanresult=m.find();
  40. if(result){
  41. for(inti=0;i<errortype.length;i++){
  42. if(m.group(1).endsWith(errortype[i])){
  43. thrownewIOException(oriFileName
  44. +"wrongtype");
  45. }
  46. }
  47. try{
  48. fi.write(newFile(uploadPath+"/"
  49. +m.group(1)));
  50. path=uploadPath+"/"+m.group(1);   //这个path是我在try{}catch(){}以外定义的,以便得到这个值存入数据库
  51. System.out.println("上传成功");
  52. }catch(Exceptiones){
  53. es.printStackTrace();

  54. }

  55. }
  56. }
  57. }
  58. }
  59. }catch(Exceptione){
  60. e.printStackTrace();
  61. }

上面的方法可以接收正确的中文,也可以接收非文件域的参数

如果是大量的用到文件上传的话也可以把这个功能单独写到一个类里,以便调用。下面我贴出一个别人写好的类。

如果要用,这个可以做个参考,直接拿来用不是个好的学习习惯。

  1. packagecom.flc.util;

  2. importjava.util.*;
  3. importjava.io.*;
  4. importjavax.servlet.http.*;
  5. importorg.apache.commons.fileupload.*;

  6. publicclassJakartaFileUploadHandler{
  7. privateMapfileFields=newTreeMap();
  8. privateMapformFields=newTreeMap();
  9. privatebooleanisMultipart=false;
  10. privateHttpServletRequestrequest=null;

  11. publicJakartaFileUploadHandler(){
  12. }

  13. publicJakartaFileUploadHandler(HttpServletRequestrequest){
  14. setRequest(request);
  15. }

  16. publicvoidsetRequest(HttpServletRequestrequest){
  17. this.request=request;
  18. isMultipart=FileUpload.isMultipartContent(request);//如果是文件上传请求,
  19. //就提取里面的参数
  20. if(isMultipart){
  21. //Createanewfileuploadhandler
  22. DiskFileUploadupload=newDiskFileUpload();
  23. try{
  24. //Parsetherequest
  25. Listitems=upload.parseRequest(request);
  26. //Processtheuploadeditems
  27. Iteratoriter=items.iterator();
  28. while(iter.hasNext()){
  29. FileItemitem=(FileItem)iter.next();
  30. Stringname=item.getFieldName();
  31. Stringvalue=item.getString();
  32. if(item.isFormField()){
  33. processFormField(item);
  34. }else{
  35. processUploadedFile(item);
  36. }
  37. }
  38. }catch(Exceptionex){
  39. System.err.println("无法处理上传数据:"+ex);
  40. }
  41. }
  42. }

  43. privatevoidprocessFormField(FileItemitem){
  44. Stringname=item.getFieldName();
  45. Stringvalue=item.getString();//首先尝试获取原来的值
  46. ObjectoldValue=formFields.get(name);
  47. if(oldValue==null){
  48. formFields.put(name,value);
  49. }else{
  50. //多个值存储为List//原来为单个值则添加现有的值
  51. try{
  52. StringoldString=(String)oldValue;
  53. Listlist=newArrayList();
  54. list.add(oldString);
  55. list.add(value);
  56. formFields.put(name,list);
  57. }catch(Exceptionex){
  58. ex.printStackTrace();
  59. }
  60. //原来为多个值则添加现有的值
  61. try{
  62. Listlist=(List)oldValue;
  63. list.add(value);
  64. formFields.put(name,list);
  65. }catch(Exceptionex){//
  66. ex.printStackTrace();
  67. }
  68. }
  69. }

  70. commonfileUpload接收文件以外的参数和中文乱码的问题 jsp接收参数乱码
  71. privatevoidprocessUploadedFile(FileItemitem){
  72. Stringname=item.getFieldName();
  73. fileFields.put(name,item);
  74. }

  75. }

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/61114.html

更多阅读

windows7 设置文件夹的权限设置 windows文件夹权限

windows7 设置文件夹的权限设置——简介有些重要的文件,不希望别人删除或者修改。可以给文件夹设置权限,以保护文件,下面介绍一下windows 7系统文件夹权限的设置。步骤如下:windows7 设置文件夹的权限设置——方法/步骤windows7 设置文

win7新建文件夹的快捷键 xp新建文件夹的快捷键

任何的操作系统、软件、游戏,只有熟练使用快捷键,才能最大效率的工作、娱乐,我们不能把所有的时间都浪费在一台机器上,这是不行的。快捷键带给我们的不只是快速,还能感受到机器带来的快感。新建文件夹的快捷键C

使用WinRAR自带功能修复.rar文件 winrar的修复功能

压缩文件是目前最常见的文件类型之一,无论是用户从网上下载的共享软件,还是用户在网上传输的文件,一般都是以压缩文件的形式存在。常见的压缩文件主要包括.rar和.zip两种类型。压缩文件一旦损坏就不能被正常解压,当然也就不能得到正常的

声明:《commonfileUpload接收文件以外的参数和中文乱码的问题 jsp接收参数乱码》为网友惜沫分享!如侵犯到您的合法权益请联系我们删除