我改造了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# .NET后台post上传文件"这一主题的主要知识点,包括HTTP POST请求、ASP.NET MVC框架的应用、文件上传的前端和后端处理、图片处理、存储策略以及安全性和异常处理等方面。在实际开发中,这些知识点将...
在这个场景中,我们将深入探讨如何利用libcurl在C++中上传文件并发送POST表单数据。 首先,`con_test.cpp`是主要的源代码文件,它包含了使用libcurl进行文件上传和POST操作的具体实现。`StdAfx.cpp`和`StdAfx.h`是...
- 权限验证:对API调用进行身份验证和授权,确保只有合法用户可以上传文件。 - 文件大小限制:限制单个文件的大小以防止DoS攻击。 - 类型检查:验证上传文件类型,防止恶意文件如病毒或脚本的上传。 - 数据加密...
需要对上传文件进行安全检查,防止上传恶意文件或超过服务器存储限制的文件。可以检查文件类型、大小,并对文件名进行清理,防止路径遍历攻击。 10. **性能优化** 大文件上传可能导致内存溢出,可以考虑使用流式...
这两行代码的作用是分别设置上传文件的最大尺寸为30MB,以及POST请求的最大尺寸也为30MB。这里需要注意的是,这些值可以根据实际需要进行调整,但通常建议保持`upload_max_filesize`和`post_max_size`的值相同或...
3. 在任务中读取待上传文件的数据,并计算文件长度。 4. 设置HTTP请求头,包括"Content-Type"(如"application/octet-stream"表示二进制数据)和"Content-Length"。 5. 开始POST请求,将文件数据分块发送。 6. 监听...
总的来说,"vue附件点击上传和拖拽上传.zip"这个项目提供了一个基础的Vue文件上传实现,涵盖了点击上传和拖拽上传两种方式,同时也涉及到了文件上传的处理和服务器交互。通过这个示例,开发者可以了解到如何在Vue...
然而,通过使用AJAX(Asynchronous JavaScript and XML)技术,可以实现在后台异步上传文件,用户界面不会刷新,提高了上传的效率和用户体验。在Lotus Domino与jQuery的集成中,一般会创建一个隐藏的表单或使用...
通过分析和理解这个.NET源码,开发者可以学习到如何集成SWFUpload库,实现高效且用户友好的文件上传功能,并处理上传后的文件管理,特别是解决已上传文件的删除问题。这个资源对于那些想要在.NET环境中提升文件上传...
WebClient 是 .NET Framework 中的一个类,提供了一种简单的方式来上传文件到服务器。下面是一个使用 WebClient 上传文件的示例代码: ```csharp using System; using System.Net; public class ...
uniAPP,作为一个跨端开发框架,为开发者提供了便捷的方式来实现移动端的文件上传功能。下面,我们将详细探讨如何在uniAPP中实现这一功能。 首先,我们需要了解uniAPP的基础知识。uniAPP是由DCloud(北京嘀嗒出行...
因为我们是要上传文件,所以请求方法应设置为POST或PUT。在C#中,可以通过`RequestMethod`属性来设定: ```csharp request.Method = "POST"; ``` 3. **设置请求头**: 需要设置Content-Type为multipart/form-...
2. **upload_max_filesize**:此参数控制着单个上传文件的最大尺寸。若文件超过设定的大小限制,则无法成功上传至服务器。 为了确保Mantis能够正常处理较大尺寸的附件,通常建议设置`post_max_size`的值大于等于`...
总之,C#中实现HTTP上传文件的关键在于构造正确的HTTP请求,包括POST方法、multipart/form-data Content-Type和分隔线,以及正确处理文件数据和请求响应。通过以上代码,你可以理解并实现一个基础的文件上传功能。...
在实际项目中,还要注意性能优化、错误处理和安全性检查,以提供稳定可靠的文件上传功能。在提供的`MvcUploadFile`示例中,可能包含了实现这些功能的代码示例,你可以参考并根据自己的需求进行调整。
本文将深入探讨如何使用C++实现向Web服务器上传文件,特别是在VS2013环境下,以及与Java Web工程的交互。 首先,我们要了解HTTP协议中的POST方法。在Web应用中,POST请求常用于提交数据到服务器进行处理,例如当...
总之,"通用 万能 HttpHandler webRequest 文件上传"是一个关于使用自定义HttpHandler和HttpWebRequest进行文件上传的技术主题。这个解决方案旨在提供一个高度可定制和可扩展的文件上传服务,以满足各种Web应用的...
文件上传过程中可能出现各种错误,如网络中断、文件过大、格式不正确等。良好的错误处理机制能提供友好的反馈,提高用户体验。 8. **性能优化**: 对于大文件上传,可能需要实现断点续传、分块上传等功能,以提高...
在本示例中,我们将深入探讨如何使用HttpClient的PostMethod来上传文件,以及处理Get和Post请求中的乱码问题。 一、HttpClient基础 HttpClient库提供了一套完整的API,允许我们构建复杂的HTTP请求。它支持GET、POST...
7. **蓝imp jQuery 文件上传插件**:`blueimp-jQuery-File-Upload`是jQuery的一个知名插件,提供了一套完整的文件上传解决方案,包括多文件选择、预览、进度条、错误处理等功能。在项目中使用这个插件,可以大大简化...