由于工作原因,碰到file与其他表单同时提交的问题,研究了几天,加上google的帮助,终于成功了。下面就分享一下:
1、提交的表单必须写enctype="multipart/form-data",但是在很多情况下,可能不能确定是不是一定会有文件,这时修改,表单提交前,就是使用javascript动态控制.如下:
function setEncoding(form){
//filterForm.encoding="";
var hasFile = false;
var inputTags = document.getElementsByTagName("input");
for(i=0;i<inputTags.length;i++){
if(inputTags[i].type=="file"){
form.encoding = "multipart/form-data";
hasFile = true;
break;
}
}
return hasFile;
}
2、fileuploader.java
package com.neusoft.report.engine.util;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploader {
private List items;
private Map params=new HashMap();
public void parseParams(HttpServletRequest request) {
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();//文件解析失败,请确认form中的文件正确并且form的enctype属性为multipart/form-data
}
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
System.out.println(name+","+value);
if(params.containsKey(name)){
value = ((String)params.get(name))+","+value;
}
params.put(name, value);
}else{
String name = item.getFieldName();
byte[] fileBytes = item.get();//把文件解析成字节数组保存,当然也可以上传到临时文件夹。
params.put(name, fileBytes);
}
}
}
/*
* 从params中取
*/
public String getParameter(String name){
String value = null;
if(params.containsKey(name)){
value = (String)params.get(name);
if(value==null||value.equalsIgnoreCase("null"))
value=null;
}
return value;
}
public String[] getParameterValues(String name){
String[] values = null;
if(params.containsKey(name)){
values = ((String)params.get(name)).split(",");
}
return values;
}
public byte[] getFileParameter(String name){
byte[] fileBytes=null;
if(params.containsKey(name)){
fileBytes = (byte[])params.get(name);
}
return fileBytes;
}
/*
* 如params中没有,从request中取
*/
public String getParameter(HttpServletRequest request,String name){
String value = null;
if(params.containsKey(name)){
value = (String)params.get(name);
if(value==null||value.equalsIgnoreCase("null"))
value=null;
}else{
value = request.getParameter(name);
}
return value;
}
public String[] getParameterValues(HttpServletRequest request,String name){
String[] values = null;
if(params.containsKey(name)){
values = ((String)params.get(name)).split(",");
}else{
values = request.getParameterValues(name);
}
return values;
}
}
3、Action中的使用方法:
String hasFile = request.getParameter("hasFile");
if (hasFile == null) {
hasFile = "";
}
if (hasFile.equalsIgnoreCase("true")) {
uploader = new FileUploader();
uploader.parseParams(request);
String name = uploader.getParameter(request, "name");
type = uploader.getParameter(request, "ctype");// 报表结点类型(type=1)还是结果结点类型(type=3)
} else {
name = request.getParameter("name");
}
分享到:
相关推荐
本篇将详细讲解如何使用Commons FileUpload来实现文件上传的功能。 首先,理解HTTP协议中的多部分数据是至关重要的。在HTML表单提交文件时,通常会使用`enctype="multipart/form-data"`属性,此时,数据会被分割成...
本示例中的"fileUpload文件上传组件例子"提供了一个自定义实现的文件上传组件,旨在帮助开发者理解并掌握这一关键功能的实现方式。 首先,我们需要了解文件上传的基本原理。在HTML中,`<input type="file">`标签...
首先,我们要知道ASP.NET中的`<asp:FileUpload>`控件是实现文件上传的核心组件。它可以允许用户从本地计算机选择一个或多个文件,并将这些文件上传到服务器。在多文件上传中,我们需要确保控件的`Multiple`属性设置...
这些文件可以是实际应用中的组成部分,例如,`jsp`文件可能是前端的文件上传表单,`FileUpload`相关的Java类文件则是处理上传逻辑的后端代码。 综上所述,"fileupload文件上传下载代码示例"是一个关于使用Java进行...
- 默认情况下,FileUpload控件的上传行为是在用户提交表单时触发的。但是,我们可以通过编程方式控制其自动上传,比如在用户选择文件后立即上传。 - 这通常涉及到监听`FileUpload`控件的`FileUploadComplete`或`...
"实现文件上传的fileupload"这个项目旨在提供一个简单易用的解决方案,让用户能够方便地上传文件,甚至可以支持多文件同时上传。这样的功能在很多场景下都非常实用,比如用户在社交媒体分享照片、在云存储服务上传...
在Struts2框架中,我们可以定义一个Action类,该类会映射到特定的URL,当用户选择文件并提交表单时,Struts2会调用这个Action来处理文件上传请求。表单通常需要设置`enctype="multipart/form-data"`,以便支持文件...
在IT行业中,文件上传功能是网站和应用程序中不可或缺的一部分,特别是在需要用户提交个人资料、分享内容或进行交互式操作的场景。"FileUpload_php"是一个专门为PHP开发的上传组件,其设计灵感来源于163编辑器的上传...
在这个场景下,"实现文件上传,以及表单提交成功的回调函数"意味着我们要关注两个主要部分:文件上传的实现和表单提交后的反馈机制。 1. **文件上传**: - **前端**:文件上传在现代浏览器中通常使用HTML5的`...
本文将详细介绍如何使用ASP.NET中的`FileUpload`控件实现文件上传功能,并将文件数据保存到数据库。 #### 文件上传的基本原理 在进行文件上传之前,我们需要了解一些基本概念和技术背景: 1. **HTTP协议**:文件...
"jsp+servlet+fileupload文件上传" 这个标题表明这是一个关于使用Java Web技术进行文件上传的教程。JSP (JavaServer Pages) 是一种动态网页技术,Servlet是Java EE中的一个核心组件,常用于处理HTTP请求。FileUpload...
要实现多文件上传,我们需要对FileUpload控件做一些扩展,因为ASP.NET 2.0原生的FileUpload控件仅支持单个文件上传。一种常见的方法是使用HTML5的`<input type="file" multiple />`特性,这允许用户选择多个文件。...
**借助Commons FileUpload组件实现文件上传** Apache Commons FileUpload组件简化了文件上传的处理过程。首先,你需要在项目中引入两个JAR包:`commons-fileupload.jar`和`commons-io.jar`。然后,在Servlet中,你...
本篇将详细探讨如何实现多文件上传表单的功能,同时也会涉及到一些相关的源码和工具使用。 首先,让我们从基础开始。Spring MVC是Spring框架的一部分,用于处理HTTP请求和响应,提供了一个强大的模型-视图-控制器...
Bootstrap FileUpload是一款基于jQuery和Bootstrap框架的文件上传组件,它为用户提供了一种优雅、直观的文件上传体验。这款组件在2018年的版本中进行了更新,提供了更多的功能和优化,使其成为当时最受欢迎的文件...
本教程将详细讲解如何使用.NET MVC实现文件上传功能,这是一个常见的Web开发需求。 首先,我们需要理解.NET MVC中的控制器(Controller)是处理用户请求的地方。在文件上传场景中,控制器会接收HTTP POST请求,该...
3. **处理大文件上传**:对于大文件,我们可能需要分块上传以避免内存溢出。可以通过创建一个循环,每次读取文件的一部分,然后写入服务器的临时目录。使用Stream类可以有效地处理这个过程。 以下是一个简单的C#...
在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...
文件上传的过程涉及客户端与服务器之间的交互,主要包括表单提交、服务器接收及处理三个阶段。具体来说: 1. **客户端表单**:HTML表单的`enctype`属性必须设置为`multipart/form-data`才能支持文件上传。 2. **...
在.NET框架中,FileUpload控件是ASP.NET提供的一种用于用户在Web页面上上传文件的工具。这个控件使得在客户端浏览器中选择本地文件并将其发送到...同时,服务端验证作为补充,为整个文件上传过程提供了额外的安全保障。