`

关于post方式上传文件附件的错误

 
阅读更多

我改造了spring security, 使其可以进行数据级别的验证,这样以来需要从http request中读取参数值。今天在测试一个上传文件的页面时发现了个奇怪的问题。

        我在我spring security的voter中来获得页面提交的参数,因为是enctype="multipart/form-data"来提交表单的,所以用以下code来解析参数。

       

           Map<String, String[]> map = new HashMap<String, String[]>();
	   ServletFileUpload fileUpload = new ServletFileUpload();
 	   FileItemIterator items = fileUpload.getItemIterator(request);
	   while (items.hasNext()) {
		    FileItemStream item = items.next();
		    if (item.isFormField()) {
		    	String value =inputStream2String(item.openStream());
		        map.put(item.getFieldName(), new String[]{value});
    	             }
   	    }

    顺利的把参数得到了,security就走完了,进入struts业务方法,奇怪的事情发生了,form中值都不见了,当然提交的file也不见了。于是google了下,说是request中的流文件只能被解析一次,e文网也没找到好的解决方法,这里无论我用parseRequest方式还是像我上面code类型,都有这个问题,当然也包括了用srping 的web方式解析,总之不行,理由应该是:stream被消费过就没了。

       解决方式是偶然发现的,把需要在页面提交的其他非文件的参数放在form表单的action地址后面,像这样:action=" /learn/save.do?id=23".  

        问题解决了,我对底层的实现其实还是理解不到位,只是会用,因此会有这样的问题。另外层次分的不清晰,如果使用spring security做数据级权限验证,就可能会碰到这个问题,最好的方式应该是有一层专业解析数据的level,然后无论security还是业务都基于这一层的数据来进行。这个是属于意外情况把,花了我不少时间,打乱了原来的计划

 

分享到:
评论

相关推荐

    c# 流断点上传

    /// 附加参数,用URL的方式将此参数附件到地址中 /// 服务器端返回的 byte[] private static byte[] PostData(string serverURL, byte[] data, Hashtable parms) { System.Net.WebClient webClientObj = new ...

    uploader:同时将多个文件上传到媒体池。 可以预先按比例缩小过大的图像

    同时将多个文件上传到媒体池。 可以预先按比例缩小过大的图像。 错误 空文件上传结果 服务器端限制可能会阻止上传-使用PHP,它们是 post_max_size max_execution_time max_input_time memory_limit SyntaxError:...

    功能非常全面的一个论坛源码

    - 对于旧版的图片上传附件,提供升级程序,可以产生新的缩略图(支持TIF PSD等图像文件) - 附件允许插入帖子内容排版,未插入的将自动添加 - 允许修改附件内容,以及附件注释. 230. 用户头像上传功能修复,允许...

    MolyX 2.6.0正式版

    28. 修正后台批量删除附件不删除物理文件的错误 29. 修正帖子评分后银行帖子链接显示错误 30. 修改发表买卖帖,不需要银行开户 31. 修改搜索结果,显示专题链接 32. 修改个人资料和发帖长度限制判断方式 33. ...

    SnowmanForum(雪人论坛) 2.x SQL 到Discuz!4.0.0转换程序

    转换过程是自动的(如果不出现错误)!您不需干预,请等待出现转换全部成功的提示. 转换后需要做的: 由于 sf_2k_r9_ 论坛用户密码非标准md5格式加密,所以转换完毕后,您需要使用随本转换程序带的...

    vBulletin v3.0.7 简体中文标准版

    中文搜索完美解决 3.4 版本 (可以在改进的二元分割算法(效率高)和直接搜索 post 表(更准确)两种方式选择) 4 .+8的时区改为“北京时间” 5 .英文官方模板修正,修复了很多中文词语换行显示错误 安装...

    NewvBB Core 1.0 Final (vBulletin 简体中文化插件版)

    中文搜索完美解决 3.2 版本(可以在改进的二元分割算法(效率高、负载小)和直接搜索 post 表(更准确、数据库空间占用小)两种方式选择)5. 金钱银行插件 2.06. 隐藏帖插件 3.07. 收费附件插件 2.08. 画廊插件 ...

    php网络开发完全手册

    6.5 文件的上传与下载 99 6.5.1 文件的上传 99 6.5.2 文件的下载 100 6.6 小结 101 第7章 字符的处理与正则表达式 102 7.1 字符类型的特殊性 102 7.2 字符的显示与格式化 102 7.2.1 字符的显示 102 7.2.2 字符的格式...

    网人地方生活门户系统(WRMPS) v7.0.1.rar

    登记房产店铺-点击附件后-提交后无显示,JS冲突,更换位置解决 32.User.js和site.js代码冲突-地图和图片上传-会员中心-修改cook.asp的位置即可解决 33.所有经纪人列表页模板-原因是更改了默认的房产中介列表模板,默认...

    VB网络编程实例

    (自己的) ◆ 111.htm 在VB中实现文件上传 ◆ 112.htm 在VB中实现文件上载 ◆ 113.htm 在VB中使用UDP协议 ◆ 114.htm 在VB中用Outlook发电子邮件 ◆ 115.htm 在WindowsNT网络中广播消息 ...

    智睿学校网站管理系统

    2、调配上传附件功能增大 3、优化会员中心显示模块 20110104修正: 1、删除编辑器在IE8上错位 2、新增CKeditor3.5新版编辑 3、会员发布加载编辑模块 20101212修正: 1、修正编辑器错位版块 2、修正扩展清空无法加...

    asp.net技术内幕(1)

    4.3.3 使用HTMLInputFile控件接受文件上传 4.4 小结 &lt;br&gt;第二部分 高级ASP.NET页面开发 &lt;br&gt;第5章 用用户控件创建自定义控件 &lt;br&gt;5.1 用用户控件包含标准内容 5.2 显露用户控件中的属性和...

    asp.net技术内幕(2)

    4.3.3 使用HTMLInputFile控件接受文件上传 4.4 小结 &lt;br&gt;第二部分 高级ASP.NET页面开发 &lt;br&gt;第5章 用用户控件创建自定义控件 &lt;br&gt;5.1 用用户控件包含标准内容 5.2 显露用户控件中的属性和...

    asp.net技术内幕(5)

    4.3.3 使用HTMLInputFile控件接受文件上传 4.4 小结 &lt;br&gt;第二部分 高级ASP.NET页面开发 &lt;br&gt;第5章 用用户控件创建自定义控件 &lt;br&gt;5.1 用用户控件包含标准内容 5.2 显露用户控件中的属性和...

    asp.net技术内幕(4)

    4.3.3 使用HTMLInputFile控件接受文件上传 4.4 小结 &lt;br&gt;第二部分 高级ASP.NET页面开发 &lt;br&gt;第5章 用用户控件创建自定义控件 &lt;br&gt;5.1 用用户控件包含标准内容 5.2 显露用户控件中的属性和...

    asp.net技术内幕(3)

    4.3.3 使用HTMLInputFile控件接受文件上传 4.4 小结 &lt;br&gt;第二部分 高级ASP.NET页面开发 &lt;br&gt;第5章 用用户控件创建自定义控件 &lt;br&gt;5.1 用用户控件包含标准内容 5.2 显露用户控件中的属性和...

    ASP.net技术内幕

    4.2.8 动态产生列表条目 4.3 使用复杂控件 4.3.1 使用Calendar控件显示交互式的日历 4.3.2 使用AdRotator控件显示广告条 4.3.3 使用HTMLInputFile控件接受文件上传 4.4 小结 &lt;br...

Global site tag (gtag.js) - Google Analytics