`
冰红茶
  • 浏览: 14111 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为Struts2添加COS支持(多文件上传)

阅读更多
在工程中加入cos.jar

首先在Struts.xml文件中配置

  <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
  class="com.jongo.fea.CosMultiPartRequest" name="cos" scope="prototype"/>

  <constant name="struts.multipart.parser" value="cos"/>

其中com.fea.action.CosMultiPartRequest是一个必须实现org.apache.struts2.dispatcher.multipart.MultiPartRequest的类.它会对上传的表单进行解析

代码如下:

package com.fea.action;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.multipart.MultiPartRequest;

import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.FilePart;
import com.oreilly.servlet.multipart.MultipartParser;
import com.oreilly.servlet.multipart.ParamPart;
import com.oreilly.servlet.multipart.Part;
public class CosMultiPartRequest implements MultiPartRequest {

 private ArrayList<File> alFile;
 private Hashtable files ;
 private ArrayList<String> fileNames;
 private ArrayList<String> contentType;
 private ArrayList<String> fileSystemName;
 private Hashtable<String,ArrayList> parameters;
 private Hashtable<String,ArrayList> filePara ;
 private ArrayList<String> paraValues ;
 public String[] getContentType(String arg0) {
  ArrayList<String> aList = (ArrayList<String>)files.get(arg0+"_ContentType");
  String[] str = new String[aList.size()];
  for(int i = 0 ; i <aList.size();i++){
   str[i] = aList.get(i);
  }
  return str;
 }

 public List getErrors() {
  return Collections.EMPTY_LIST;
 }

 public File[] getFile(String arg0) {
  ArrayList<File> aList  = (ArrayList<File>)files.get(arg0);
  File[] file  =new File[aList.size()];
  for(int i =0 ;i<aList.size();i++){
   file[i]= aList.get(i);
  }
  return file;
 }

 public String[] getFileNames(String arg0) {
  ArrayList<String> aList  =(ArrayList<String>)files.get(arg0+"_name");
  String[] stt = new String[aList.size()];
  for(int i = 0 ;i <aList.size();i++){
   stt[i] = aList.get(i);
  }
  return stt;
 }

 public Enumeration<String> getFileParameterNames() {
  return filePara.keys();
 }

 public String[] getFilesystemName(String arg0) {
  ArrayList<String> arrayList  =(ArrayList<String>)files.get(arg0+"_SysName");
  String[] ss = new String[arrayList.size()];
  for(int i = 0 ;i <arrayList.size();i++){
   ss[i] = arrayList.get(i);
  }
  return ss;
 }

 public String getParameter(String arg0) {
  if(parameters.keySet().contains(arg0))
   return arg0;
  return "";
 }

 public Enumeration<String> getParameterNames() {
  return parameters.keys();
 }

 public String[] getParameterValues(String arg0) {

  ArrayList<String> al = parameters.get(arg0);
  String[] str = new String[al.size()];
  for(int i = 0 ;i <al.size();i++){
   str[i] = al.get(i);
  }
  return str;
 }

 public void parse(HttpServletRequest request, String saveDir) throws IOException {

  MultipartParser mp = new MultipartParser(request,1024*1024*10);
  mp.setEncoding("utf-8");
  Part part;

  files= new Hashtable<String, Object>();
  alFile = new ArrayList<File>();
  fileNames = new ArrayList<String>();
  fileSystemName = new ArrayList<String>();
  contentType = new ArrayList<String>();
  filePara = new Hashtable<String, ArrayList>();
  paraValues = new ArrayList<String>();
  parameters = new Hashtable<String, ArrayList>();

  for(int i = 0 ;(part =mp.readNextPart())!=null;i++){
   if(part.isFile()){
    FilePart fp = (FilePart)part;

    alFile = (ArrayList)files.get(fp.getName());
    if(alFile==null||alFile.size()<1){
     alFile =new ArrayList();
    }
    File fil = new File(saveDir+fp.getFileName());
    fp.writeTo(fil);
    alFile.add(fil);


    fileNames =(ArrayList)files.get(fp.getName()+"_name");
    if(fileNames==null||fileNames.size()<1){
     fileNames =new ArrayList<String>();
    }
    fileNames.add(fp.getFileName());


    fileSystemName =(ArrayList)files.get(fp.getName()+"_SysName");
    if(fileSystemName==null||fileSystemName.size()<1){
     fileSystemName =new ArrayList<String>();
    }
    fileSystemName.add(fp.getFilePath());

    contentType =(ArrayList)files.get(fp.getName()+"_ContentType");
    if(contentType==null||contentType.size()<1){
     contentType =new ArrayList<String>();
    }
    contentType.add(fp.getContentType());

 

    files.put(fp.getName(), alFile);
    files.put(fp.getName()+"_name", fileNames);
    files.put(fp.getName()+"_SysName", fileSystemName);
    files.put(fp.getName()+"_ContentType", contentType);
    filePara.put(fp.getName(),alFile);
   }else if(part.isParam()){
    ParamPart pp =(ParamPart)part;
    paraValues =parameters.get(pp.getName());
    if(paraValues==null||paraValues.size()<1){
     paraValues = new ArrayList<String>();
    }
    paraValues.add(pp.getStringValue());
    parameters.put(pp.getName(), paraValues);

   }else{

   }
  }
 }

}




在Action 中和Jakarta的上传处理一模一样.
分享到:
评论
3 楼 menghuannvxia 2014-08-22  
求action中的代码
2 楼 menghuannvxia 2014-08-22  
是完全一样吗,cos在action中的处理采用Jakarta的方式吗,应该不是吧
1 楼 menghuannvxia 2014-08-22  
你是说action中还是采用Jakarta的形式,就能实现cos吗,我现在也用这个,想请教你问题,我qq:1018589834

相关推荐

    struts2文件上传

    3. 配置Struts2:在`struts.xml`配置文件中,添加对应的Action配置,确保文件上传Action能被正确映射和执行。 4. 处理文件上传的异常和错误:在实际应用中,还需要考虑文件大小限制、文件类型检查、上传错误处理等...

    Struts2文件的上传和下载

    Struts2提供了配置文件上传限制的方法,如在struts.properties或struts.xml中设置`struts.multipart.maxSize`。 总的来说,Struts2通过集成Apache Commons FileUpload简化了文件上传操作,使得开发者可以更专注于...

    Struts2文件上传和下载教程

    在Struts2框架中,实现文件上传主要依赖于表单的`enctype`属性设置为`multipart/form-data`。这种设置允许表单中的文件作为请求的一部分发送到服务器端。 **1.2 enctype详解** - **application/x-...

    Struts2文件上传

    Struts2框架虽然自身并不直接提供文件上传功能,但它支持集成Common-FileUpload和COS等第三方文件上传框架,通过对其进一步封装,简化了文件上传的代码实现,提高了开发效率。 - **Common-FileUpload**:由Apache...

    Struts 2 properties文件详解

    这些属性决定了Struts 2的行为特征以及与其他组件如Spring、文件上传组件等的集成方式。下面将详细介绍`struts.properties`文件中可以定义的关键配置项。 #### struts.configuration **描述**: 此属性用于指定加载...

    struts2配置文件详细说明

    - `struts.multipart.parser`配置文件上传解析器,可以是`cos`, `pell`或`jakarta`,每个解析器处理文件上传的方式不同。 8. **配置管理**: - `struts.configuration`可以自定义配置管理器,实现`Configuration`...

    struts2文件上传总结

    - `struts.multipart.parser`:设置文件上传解析器,可以是jakarta、pell或cos,默认为jakarta。 - `struts.multipart.saveDir`:指定临时保存上传文件的目录。 - `struts.multipart.maxSize`:设置整个请求的...

    struts2 文件的上传与下载

    2. **更改上传框架**:如果需要更换其他的文件上传框架,可以通过修改`struts.multipart.parser`常量的值为`cos/pell`等来实现,并在lib目录下添加相应的上传组件类库。 3. **文件上传Action示例**:下面是一个简单...

    struts2文件上传和下载精细讲解

    在Struts2框架中,文件上传和下载的操作被简化并封装,使得开发者能够更加方便地实现这些功能。 首先,文件上传的原理基于HTML表单的enctype属性。当enctype设置为"multipart/form-data"时,表单数据将以二进制流的...

    Struts2的常量详解

    常见的选项有"cos"(使用COS文件上传库)、"pell"和"jakarta"(使用Apache Commons FileUpload)。如果选择"cos"或"pell",需要添加对应的库文件到Web应用的lib目录。 9. **struts.multipart.saveDir**: 指定上传...

    jsp里面用cos进行文件上传

    对于使用JSP(JavaServer Pages)技术的开发者来说,实现文件上传的方法有很多,例如使用jspsmart公司的SmartUpload、Struts框架提供的组件等。本文将重点介绍如何使用Cos组件来实现文件上传功能。 #### Cos组件...

    struts.xml文件详解.doc

    8. struts.multipart.parser:选择处理multipart/form-data类型的文件上传请求的框架,如cos、pell或jakarta。默认使用jakarta,但使用其他框架时需要添加相应的JAR文件到Web应用的lib目录。 9. struts.multipart....

    Struts2配置文件详解

    - **示例**: `struts.multipart.parser=cos`表示使用Cos库处理文件上传。 - **注意事项**: 使用非默认值时需确保相应的库已添加到项目的类路径中。 **9. struts.multipart.saveDir** - **功能**: 指定上传文件的...

    Struts2学习手册之文件上传基础教程

    4. **配置Struts2**:在Struts2的配置文件(如struts.xml)中,为文件上传的Action添加相应的配置,指定其执行的方法和结果视图。例如: ```xml &lt;result name="success"&gt;/success.jsp ``` 5. **处理异常**:...

    基于struts2的上传下载

    - 在处理文件上传时,Struts2内部依赖于Apache Commons FileUpload组件(或其他支持的第三方组件如COS)来进行文件解析和处理工作。 2. **配置与集成** - 需要在项目的`WEB-INF/lib`目录下添加Apache Commons ...

    struts.properties详解

    - **struts.multipart.parser**:该属性指定处理`multipart/form-data` MIME类型的请求(主要用于文件上传)所使用的框架。默认值为`jakarta`,即使用`commons-fileupload`库。其他选项包括`cos`和`pell`,但使用...

    struts.properties文件详解

    8. `struts.multipart.parser`: 选择处理文件上传请求的解析器,如 `cos`, `pell` 或 `jakarta`,默认使用 `jakarta`,对应的库需要添加到项目的类路径中。 9. `struts.multipart.saveDir`: 设置上传文件的临时存储...

    Struts 2 属性

    指定处理文件上传请求的框架,如`cos`、`pell`或`jakarta`,需根据选择的框架添加相应的依赖库。 #### 9. struts.multipart.saveDir 定义上传文件的临时存储目录,有助于管理文件上传过程中的资源占用。 #### 10. ...

    struts2参数.txt

    此参数用于指定Struts2框架的配置类,默认值为`org.apache.struts2.config.DefaultConfiguration`。在Struts2框架初始化时,会实例化一个配置类来读取并解析各种配置信息。这涉及到框架的配置、组件的创建以及对各种...

    struts1学习项目(sql数据库)

    5. **cos与Struts包的文件上传功能**:Cos (Commons-FileUpload) 是Apache的一个子项目,它为Java提供了一个处理文件上传的API。与Struts1结合使用,可以实现更灵活的文件上传功能。Cos库简化了文件上传的处理过程,...

Global site tag (gtag.js) - Google Analytics