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

来源:互联网 发布:记账软件破解版 编辑:程序博客网 时间:2024/06/12 03:39


首先,我在这里使用的是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

阅读全文
0 0
原创粉丝点击