一、项目基本环境:struts2等
二、基本需求&问题:需要自己写程序调用common-fileupload来处理上传的文件,但在代码调用upload.parseRequest(request)来处理时,返回了空的items
三、处理方法
1、按照网上找到对该问题的相关处理方法:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
修改为
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
这个处理方法的细节可以参考
http://topic.csdn.net/u/20090514/10/ba62c761-e591-4c9e-859a-87907634ea13.html
2、我的处理方法
对于第1钟处理方式,网友们的意思应该是别让请求经过struts2,免得inputStream被提前读取了。虽然这样可以正常使用common-fileupload了,但这样就不经过struts2的拦截器了,而我又想让它拦一次,于是,我自己实现一个servlet.Filter,并且把它的filter次序放到struts2的filter次序之前。主要源码如下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(new StrutsRequestWrapper((HttpServletRequest) request), response);
}
这里先用StrutsRequestWrapper来给他wrapper一次,这样在经过struts2的filter的时候就不会有问题了。为啥呢?可以自己看看这个类
org.apache.struts2.dispatcher.Dispatcher里面的wrapRequest方法,有这么个判断:
// don't wrap more than once
if (request instanceof StrutsRequestWrapper) {
return request;
}
挺恶心的处理方式吧,我也觉得。因为暂时没想到更好的处理方式了,先这样做,把功能实现先。
如果以后有其他网友看到我这里的记录,而且有更好的建议,欢迎一起讨论。
分享到:
相关推荐
2. **Json参数和Gson解析**:`GsonRequest`是Volley中的一个扩展,用于处理JSON格式的数据。首先,你需要导入`com.google.gson.Gson`库。创建`GsonRequest`时,需要指定请求的URL、请求方法(GET或POST)、数据类型...
List<FileItem> list = upload.parseRequest(request); 每个FileItem对象对应一个表单项,包含了表单项的详细信息,例如字段名、文件名、文件内容、文件类型等。FileItem对象提供了多种方法,例如: * ...
List<FileItem> items = upload.parseRequest(request); Iterator<FileItem> iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); String fileName = item.getName()...
if (request.Files == null || request.Files.Count ) throw new ApplicationException("no file to be uploaded!"); var file = request.Files[0]; var filename = System.IO.Path.GetFileName(file.FileName);...
List<FileItem> items = upload.parseRequest(request); Iterator<FileItem> itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); if (item.isFormField()) { String ...
文件的上传功能,只要自己构造一个servlet即可。 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { response.setContentType(CONTENT_TYPE); // Set ...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 保存文件到服务器 item.write(new File(...
本知识点主要探讨如何实现一个Web页面,允许用户上传CSV文件,并进行相关的处理。 首先,我们需要在Web页面上创建一个文件输入元素,让用户选择CSV文件。这通常通过HTML5的`<input type="file">`标签实现。例如: ...
List<FileItem> items = upload.parseRequest(req); // 遍历 FileItem 列表 for (FileItem item : items) { // 获取上传的文件内容 InputStream in = item.getInputStream(); // 处理文件内容 // ... } } }...
items = upload.parseRequest(request); } catch (FileUploadException e) { // 处理异常 } for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 保存或处理...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { // 处理文件项 } } ``` 4. 遍历`FileItem`列表,处理每个上传的文件。 ```java String ...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = item.getName(); // 处理文件保存逻辑 item.write(new File("保存路径...
List<FileItem> items = upload.parseRequest(ActionContext.getContext().getServletRequest()); for (FileItem item : items) { if (!item.isFormField()) { file = item.getFile(); fileContentType = item....
`parseRequest()`方法解析请求并返回一个`FileItem`列表,然后我们可以遍历这个列表,将每个文件保存到服务器。 在实际应用中,还需要考虑以下几点: 1. 错误处理:确保捕获并处理可能出现的异常,如文件大小超出...
items = upload.parseRequest(request); } catch (FileUploadException e) { log.error("Failed to parse upload request", e); return mapping.findForward("error"); } for (FileItem item : items) { if ...
try { // 获取上传文件的列表 List<FileItem> items = upload.parseRequest(requestContext); Iterator<FileItem> iter = items.iterator(); // 遍历上传的文件,进行处理 while (iter.hasNext()) { FileItem item ...
List<FileItem> items = upload.parseRequest(request); FileItem file = items.get(0); String fileName = file.getName(); byte[] content = file.get().getBytes(); ``` 4. **连接Oracle数据库** 使用JDBC...
List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); item.write(new File("指定的...
1. **创建下载链接**:在用户界面中,为每个可下载的文件创建一个链接,链接指向一个处理下载的JSP或Servlet。 ```html <a href="download.jsp?fileName=文件名">下载文件 ``` 2. **JSP或Servlet处理下载**:在...
List pictureList = dfu.parseRequest(request); Iterator it = pictureList.iterator(); while (it.hasNext()) { FileItem item = (FileItem) it.next(); String pictureName = item.getName(); ...