`
wang.dch
  • 浏览: 41508 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

fileupload文件上传与表单同时提交的实现

    博客分类:
  • java
阅读更多

     由于工作原因,碰到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");

  }

分享到:
评论

相关推荐

    common-fileupload实例:fileList = upload.parseRequest(request);上传file文件和form表单提交

    fileList = upload.parseRequest(request);上传file文件和form表单提交 common-fileupload实例

    JSP-文件图片上传-fileupload组件-commons-upload

    通过“上传页面”把上传路径提交到upload.jsp页面进行处理,然后把照片文件上传并保存到服务器上。处理代码如下: (); ServletFileUpload upload = new ServletFileUpload(factory); try {List items = upload....

    jsp利用commons-fileupload 上传图片(包含表单数据)

    在一个表单中包含普通文本数据,另外还有需要上传的图片,那么本程序通过commons-fileupload 相关jar包将图片保存到服务器上的一个图片目录中,该目录在服务器根目录下,具体位置则可自定义。 程序中还包括表单中...

    Java中,当表单含有文件上传时,提交数据的如何读取(吐血版)

    Java中,当表单含有文件上传时,提交数据的如何读取(吐血版)亲自测试版本。花了整整一天,主要针对enctype="multipart/form-data"form 提交的方式

    CSharp客户端通过Http模拟表单提交到Java的web服务端.rar

    CSharp客户端通过Http模拟表单提交到Java的web服务端.rar C#的wpf客户端使用HttpWebRequest模拟网页表单提交数据到Java的web服务端,...*该程序可以同时提交表单数据和上传文件* **********************************

    commons-fileupload-1.3.3

    commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前后台的一致性,注意在后台定义File文件对象名要与jsp页面中的file标签name名字一致,前台form标签属性一定要设置为enctype="multipart/form-data",而且...

    Spring下的子框架SpringMVC实现多文件上传完整代码

    文件上传客户端表单需要满足: 1、表单项type=“file” 2、表单的提交方式是post 3、表单的enctype属性是:enctype=“multipart/form-data” 选择了一个文件,点击上传,我们会把这个请求提交,选择了文件,把所有的...

    jsp文件上传下载通用包

    FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的 request请求也就是一个FileItem的有序组合,FileUpload组件可以解析该request,并返回一个一个...

    使用GWT实现文件上传功能

    Google Web Toolkit中提供了FormPanel和FileUpload类用于以一种友好的方式实现表单处理和文件提交。然而,从其相关的API资料中看出,它们的工作原理并不那么直截了当。本文小例提供了使用Google Web Toolkit实现文件...

    文件上传所需的jar包

    commons-fileupload-1.1&&commons-io-1.2.rar 文件上传所需的jar包

    Servlet实现文件上传,可多文件上传示例

    二:文件上传的表单提交方式必须是POST方式, 编码类型:enctype=”multipart/form-data”,默认是 application/x-www-form-urlencoded 比如: &lt;form action="FileUpLoad"enctype="multipart/form-dat

    struts2实现文件上传

    以前使用的是fileupload 框架来实现的文件上传但是在Servlet 中要写很多的代码来解析文件上传,还跟一般的表单提交不一样很麻烦。使用的struts2框架后使用struts2中的文件上传功能特别的方便。有文档有代码对着我的...

    php使用curl模拟浏览器表单上传文件或者图片的方法

    在浏览器使用html中的input框我们可以实现文件的上传,表单元素选用 &lt;input type=”file”&gt; 控件,form 表单需要设置 enctype=”multipart/form-data” 属性。比如: &lt;body&gt; &lt;form action=...

    jsp文件上传

    用的的apache的fileupload组件 实现了表单提交和文件上传的集合 里面是myeclipse的工程文件 包含全部的包 完整的demo

    struts上传下载(包含单个文件和多个文件)

    1.直接import到MyEclipse直接运行。 2.包含上传一个文件和多个文件 3.struts上传 用到包commons-fileupload-1.2.1.jar commons-io-1.4.jar(项目中已经有) 4.附带图片

    servlet+JSP+mysql实现文件上传的方法

    本文实例讲述了servlet+JSP+mysql实现文件上传的方法。分享给大家供大家参考,具体如下: 一、文件上传的基本操作: 1、 表单属性enctype的设置 multipart/form-data和application/x-www-form-urlencoded的区别 FORM...

    使用Ajax进行文件与其他参数的上传功能(java开发)

    找了很多资料,在网上看到的大部分是form表单的方式提交文件,对于Ajax方式提交文件并且也要提交表单中其他数据,发现提及的并不是很多,后来在同事的帮助下,使用ajaxfileupload最终完成了文件上传与其他提交的操作...

    PHP文件上传类实例详解

    这里演示了FileUpload.class.php文件上传类,其中用到了两个常量,可在网站配置文件中定义: define('ROOT_PATH',dirname(__FILE__)); //网站根目录 define('UPDIR','/uploads/'); //上传主目录 具体代码如下: &...

    使用jQuery.form.js/springmvc框架实现文件上传功能

    主要实现异步文件上传的同时封装对象,以及一些注意事项。 功能本身是很简单的,但是涉及到一些传递参数类型的问题。例如:jquery的ajax方法与jquery.form.js中的ajaxSubmit方法的参数,具体细节将在下一篇博客中...

    Java 文件上传和下载

    该Demo是一个简单易用的WEB上传和下载,采用第三方组件apache的...可实现表单中数据和文件提交方便、效率高、批量上传等。myeclipse+mysql+tomcat5.5开发环境。该源码仅供大家学习和参考用!(源码已包含必须的jar包)

Global site tag (gtag.js) - Google Analytics