由于工作原因,碰到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");
}
分享到:
相关推荐
fileList = upload.parseRequest(request);上传file文件和form表单提交 common-fileupload实例
通过“上传页面”把上传路径提交到upload.jsp页面进行处理,然后把照片文件上传并保存到服务器上。处理代码如下: (); ServletFileUpload upload = new ServletFileUpload(factory); try {List items = upload....
在一个表单中包含普通文本数据,另外还有需要上传的图片,那么本程序通过commons-fileupload 相关jar包将图片保存到服务器上的一个图片目录中,该目录在服务器根目录下,具体位置则可自定义。 程序中还包括表单中...
Java中,当表单含有文件上传时,提交数据的如何读取(吐血版)亲自测试版本。花了整整一天,主要针对enctype="multipart/form-data"form 提交的方式
CSharp客户端通过Http模拟表单提交到Java的web服务端.rar C#的wpf客户端使用HttpWebRequest模拟网页表单提交数据到Java的web服务端,...*该程序可以同时提交表单数据和上传文件* **********************************
commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前后台的一致性,注意在后台定义File文件对象名要与jsp页面中的file标签name名字一致,前台form标签属性一定要设置为enctype="multipart/form-data",而且...
文件上传客户端表单需要满足: 1、表单项type=“file” 2、表单的提交方式是post 3、表单的enctype属性是:enctype=“multipart/form-data” 选择了一个文件,点击上传,我们会把这个请求提交,选择了文件,把所有的...
FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的 request请求也就是一个FileItem的有序组合,FileUpload组件可以解析该request,并返回一个一个...
Google Web Toolkit中提供了FormPanel和FileUpload类用于以一种友好的方式实现表单处理和文件提交。然而,从其相关的API资料中看出,它们的工作原理并不那么直截了当。本文小例提供了使用Google Web Toolkit实现文件...
commons-fileupload-1.1&&commons-io-1.2.rar 文件上传所需的jar包
二:文件上传的表单提交方式必须是POST方式, 编码类型:enctype=”multipart/form-data”,默认是 application/x-www-form-urlencoded 比如: <form action="FileUpLoad"enctype="multipart/form-dat
以前使用的是fileupload 框架来实现的文件上传但是在Servlet 中要写很多的代码来解析文件上传,还跟一般的表单提交不一样很麻烦。使用的struts2框架后使用struts2中的文件上传功能特别的方便。有文档有代码对着我的...
在浏览器使用html中的input框我们可以实现文件的上传,表单元素选用 <input type=”file”> 控件,form 表单需要设置 enctype=”multipart/form-data” 属性。比如: <body> <form action=...
用的的apache的fileupload组件 实现了表单提交和文件上传的集合 里面是myeclipse的工程文件 包含全部的包 完整的demo
1.直接import到MyEclipse直接运行。 2.包含上传一个文件和多个文件 3.struts上传 用到包commons-fileupload-1.2.1.jar commons-io-1.4.jar(项目中已经有) 4.附带图片
本文实例讲述了servlet+JSP+mysql实现文件上传的方法。分享给大家供大家参考,具体如下: 一、文件上传的基本操作: 1、 表单属性enctype的设置 multipart/form-data和application/x-www-form-urlencoded的区别 FORM...
找了很多资料,在网上看到的大部分是form表单的方式提交文件,对于Ajax方式提交文件并且也要提交表单中其他数据,发现提及的并不是很多,后来在同事的帮助下,使用ajaxfileupload最终完成了文件上传与其他提交的操作...
这里演示了FileUpload.class.php文件上传类,其中用到了两个常量,可在网站配置文件中定义: define('ROOT_PATH',dirname(__FILE__)); //网站根目录 define('UPDIR','/uploads/'); //上传主目录 具体代码如下: &...
主要实现异步文件上传的同时封装对象,以及一些注意事项。 功能本身是很简单的,但是涉及到一些传递参数类型的问题。例如:jquery的ajax方法与jquery.form.js中的ajaxSubmit方法的参数,具体细节将在下一篇博客中...
该Demo是一个简单易用的WEB上传和下载,采用第三方组件apache的...可实现表单中数据和文件提交方便、效率高、批量上传等。myeclipse+mysql+tomcat5.5开发环境。该源码仅供大家学习和参考用!(源码已包含必须的jar包)