关于input标签带有enctype="multipartform-data"而导致getParameter获取不到值的解决方法2

xiaoxiao2021-02-28  102

首先,我在这里使用的是jspSmartUpload的jar包

1.由于jspSmartUpload的默认编码方式不是utf8,所以首先修改一下jspSmartUpload源文件:

对于上传:

在SmartUpload.java类中

①.在Upload()方法中,将

String var19 = new String(this.m_binArray, this.m_startData, this.m_endData - this.m_startData + 1); 改为 String var19 = new String(this.m_binArray, this.m_startData, this.m_endData - this.m_startData + 1, "UTF-8"); ②.在getDataHeader()方法中,将var5 = new String(this.m_binArray, var1, var2 - var1 + 1);改为try { String encode = this.m_response.getCharacterEncoding(); if(encode.equalsIgnoreCase("UTF-8")) { new String(this.m_binArray, var1, var2 - var1 + 1, "UTF-8"); var5 = new String(this.m_binArray, var1, var2 - var1 + 1, "UTF-8"); } else { var5 = new String(this.m_binArray, var1, var2 - var1 + 1); } } catch (UnsupportedEncodingException var7) { var7.printStackTrace(); }在File.java类中在getContentString()方法中,var1 = new String(this.m_parent.m_binArray, this.m_startData, this.m_size);改为try { var1 = new String(this.m_parent.m_binArray, this.m_startData, this.m_size, "UTF-8"); } catch (UnsupportedEncodingException var3) { var3.printStackTrace(); }对于下载:在SmartUpload.java类中downloadFile(String var1, String var2, String var3, int var4)方法中,将if(var3 == null) { this.m_response.setHeader("Content-Disposition", this.m_contentDisposition + " filename=" + this.getFileName(var1)); } else if(var3.length() == 0) { this.m_response.setHeader("Content-Disposition", this.m_contentDisposition); } else { this.m_response.setHeader("Content-Disposition", this.m_contentDisposition + " filename=" + var3); }改为if(var3 == null) { this.m_response.setHeader("Content-Disposition", this.m_contentDisposition + " filename=" + this.toUtf8String(this.getFileName(var1))); } else if(var3.length() == 0) { this.m_response.setHeader("Content-Disposition", this.m_contentDisposition); } else { this.m_response.setHeader("Content-Disposition", this.m_contentDisposition + " filename=" + this.toUtf8String(var3)); } 同时添加toUtf8String(String fileName) 方法 public String toUtf8String(String fileName) { StringBuffer stringBuffer = new StringBuffer(); for(int i = 0; i < fileName.length(); ++i) { char c = fileName.charAt(i); if(c >= 0 && c <= 255) { stringBuffer.append(c); } else { byte[] bytes; try { bytes = Character.toString(c).getBytes("UTF-8"); } catch (UnsupportedEncodingException var8) { var8.printStackTrace(); bytes = new byte[0]; } for(int j = 0; j < bytes.length; ++j) { int k = bytes[j]; if(k < 0) { k += 256; } stringBuffer.append("%" + Integer.toHexString(k).toUpperCase()); } } } return stringBuffer.toString(); }2.在servlet中加入 SmartUpload smartUpload = new SmartUpload(); smartUpload.initialize(getServletConfig(),request,response); try { smartUpload.upload(); } catch (SmartUploadException e) { e.printStackTrace(); }及将String title = request().getParameter("title");改为String title = smartUpload.getRequest().getParameter("title");3.对于如何修改jar包中的源代码(不需要反编译工具): 首先将你要更改的源码文件在eclipse或intelliJ中编译成.class文件再找到你需要更改的.jar包在桌面右键新建个文件夹把你要改的.jar包ctrl+c和ctrl+v准备好一个压缩工具(2345或360压缩都可以)选中.jar包右键解压到当前文件夹下逐层文件夹找到你要更改的.class文件替换掉最后在将你刚刚解压出来的文件选中再次压缩回zip(或者其他都可以),在右键重命名将后缀名改成.jar即可注意:1.在编译成class文件的过程中,创建的java类及其包都要一模一样 2.一定要保证jsp,servlet,tomcat及mysql的编码方式均为utf8(或者其他相同的编码方式),可以参考我的另一篇文章http://blog.csdn.net/yin__ren/article/details/74942353 对于上面的解释,来源于:http://www.jb51.net/article/85944.htm 和 http://www.cnblogs.com/wanqi007/p/5766030.html

转载请注明原文地址: https://www.6miu.com/read-61364.html

最新回复(0)