`
wang.dch
  • 浏览: 42568 次
  • 性别: 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");

  }

分享到:
评论

相关推荐

    commons-fileupload实现文件上传

    本篇将详细讲解如何使用Commons FileUpload来实现文件上传的功能。 首先,理解HTTP协议中的多部分数据是至关重要的。在HTML表单提交文件时,通常会使用`enctype="multipart/form-data"`属性,此时,数据会被分割成...

    fileUpload文件上传组件例子

    本示例中的"fileUpload文件上传组件例子"提供了一个自定义实现的文件上传组件,旨在帮助开发者理解并掌握这一关键功能的实现方式。 首先,我们需要了解文件上传的基本原理。在HTML中,`&lt;input type="file"&gt;`标签...

    C# .NET FileUpload 多文件上传例子

    首先,我们要知道ASP.NET中的`&lt;asp:FileUpload&gt;`控件是实现文件上传的核心组件。它可以允许用户从本地计算机选择一个或多个文件,并将这些文件上传到服务器。在多文件上传中,我们需要确保控件的`Multiple`属性设置...

    fileupload文件上传下载代码示例

    这些文件可以是实际应用中的组成部分,例如,`jsp`文件可能是前端的文件上传表单,`FileUpload`相关的Java类文件则是处理上传逻辑的后端代码。 综上所述,"fileupload文件上传下载代码示例"是一个关于使用Java进行...

    FileUpload控件自动上传

    - 默认情况下,FileUpload控件的上传行为是在用户提交表单时触发的。但是,我们可以通过编程方式控制其自动上传,比如在用户选择文件后立即上传。 - 这通常涉及到监听`FileUpload`控件的`FileUploadComplete`或`...

    实现文件上传的fileupload

    "实现文件上传的fileupload"这个项目旨在提供一个简单易用的解决方案,让用户能够方便地上传文件,甚至可以支持多文件同时上传。这样的功能在很多场景下都非常实用,比如用户在社交媒体分享照片、在云存储服务上传...

    java实现的文件上传下载FileUpLoad

    在Struts2框架中,我们可以定义一个Action类,该类会映射到特定的URL,当用户选择文件并提交表单时,Struts2会调用这个Action来处理文件上传请求。表单通常需要设置`enctype="multipart/form-data"`,以便支持文件...

    FileUpload_php--上传组件

    在IT行业中,文件上传功能是网站和应用程序中不可或缺的一部分,特别是在需要用户提交个人资料、分享内容或进行交互式操作的场景。"FileUpload_php"是一个专门为PHP开发的上传组件,其设计灵感来源于163编辑器的上传...

    实现文件上传,以及表单提交成功的回调函数

    在这个场景下,"实现文件上传,以及表单提交成功的回调函数"意味着我们要关注两个主要部分:文件上传的实现和表单提交后的反馈机制。 1. **文件上传**: - **前端**:文件上传在现代浏览器中通常使用HTML5的`...

    用FileUpload控件上传文件到数据库

    本文将详细介绍如何使用ASP.NET中的`FileUpload`控件实现文件上传功能,并将文件数据保存到数据库。 #### 文件上传的基本原理 在进行文件上传之前,我们需要了解一些基本概念和技术背景: 1. **HTTP协议**:文件...

    jsp+servlet+fileupload文件上传

    "jsp+servlet+fileupload文件上传" 这个标题表明这是一个关于使用Java Web技术进行文件上传的教程。JSP (JavaServer Pages) 是一种动态网页技术,Servlet是Java EE中的一个核心组件,常用于处理HTTP请求。FileUpload...

    Asp.net 2.0 用FileUpload 控件实现多文件上传

    要实现多文件上传,我们需要对FileUpload控件做一些扩展,因为ASP.NET 2.0原生的FileUpload控件仅支持单个文件上传。一种常见的方法是使用HTML5的`&lt;input type="file" multiple /&gt;`特性,这允许用户选择多个文件。...

    commons fileupload实现文件上传的实例代码

    **借助Commons FileUpload组件实现文件上传** Apache Commons FileUpload组件简化了文件上传的处理过程。首先,你需要在项目中引入两个JAR包:`commons-fileupload.jar`和`commons-io.jar`。然后,在Servlet中,你...

    SpringMVC之表单提交===③===多文件上传表单

    本篇将详细探讨如何实现多文件上传表单的功能,同时也会涉及到一些相关的源码和工具使用。 首先,让我们从基础开始。Spring MVC是Spring框架的一部分,用于处理HTTP请求和响应,提供了一个强大的模型-视图-控制器...

    bootstrap-fileupload文件上传组件2018最新版

    Bootstrap FileUpload是一款基于jQuery和Bootstrap框架的文件上传组件,它为用户提供了一种优雅、直观的文件上传体验。这款组件在2018年的版本中进行了更新,提供了更多的功能和优化,使其成为当时最受欢迎的文件...

    .NET MVC实现文件上传

    本教程将详细讲解如何使用.NET MVC实现文件上传功能,这是一个常见的Web开发需求。 首先,我们需要理解.NET MVC中的控制器(Controller)是处理用户请求的地方。在文件上传场景中,控制器会接收HTTP POST请求,该...

    C#Fileupload上传控件上传任意大小的文件

    3. **处理大文件上传**:对于大文件,我们可能需要分块上传以避免内存溢出。可以通过创建一个循环,每次读取文件的一部分,然后写入服务器的临时目录。使用Stream类可以有效地处理这个过程。 以下是一个简单的C#...

    利用commons-fileupload上传组件上传文件(一)

    在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...

    commons-fileupload文件上传组件中文教程--张孝祥写的

    文件上传的过程涉及客户端与服务器之间的交互,主要包括表单提交、服务器接收及处理三个阶段。具体来说: 1. **客户端表单**:HTML表单的`enctype`属性必须设置为`multipart/form-data`才能支持文件上传。 2. **...

    FileUpload控件上传文件客户端验证格式

    在.NET框架中,FileUpload控件是ASP.NET提供的一种用于用户在Web页面上上传文件的工具。这个控件使得在客户端浏览器中选择本地文件并将其发送到...同时,服务端验证作为补充,为整个文件上传过程提供了额外的安全保障。

Global site tag (gtag.js) - Google Analytics