在工程中加入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. 配置Struts2:在`struts.xml`配置文件中,添加对应的Action配置,确保文件上传Action能被正确映射和执行。 4. 处理文件上传的异常和错误:在实际应用中,还需要考虑文件大小限制、文件类型检查、上传错误处理等...
Struts2提供了配置文件上传限制的方法,如在struts.properties或struts.xml中设置`struts.multipart.maxSize`。 总的来说,Struts2通过集成Apache Commons FileUpload简化了文件上传操作,使得开发者可以更专注于...
在Struts2框架中,实现文件上传主要依赖于表单的`enctype`属性设置为`multipart/form-data`。这种设置允许表单中的文件作为请求的一部分发送到服务器端。 **1.2 enctype详解** - **application/x-...
Struts2框架虽然自身并不直接提供文件上传功能,但它支持集成Common-FileUpload和COS等第三方文件上传框架,通过对其进一步封装,简化了文件上传的代码实现,提高了开发效率。 - **Common-FileUpload**:由Apache...
这些属性决定了Struts 2的行为特征以及与其他组件如Spring、文件上传组件等的集成方式。下面将详细介绍`struts.properties`文件中可以定义的关键配置项。 #### struts.configuration **描述**: 此属性用于指定加载...
- `struts.multipart.parser`配置文件上传解析器,可以是`cos`, `pell`或`jakarta`,每个解析器处理文件上传的方式不同。 8. **配置管理**: - `struts.configuration`可以自定义配置管理器,实现`Configuration`...
- `struts.multipart.parser`:设置文件上传解析器,可以是jakarta、pell或cos,默认为jakarta。 - `struts.multipart.saveDir`:指定临时保存上传文件的目录。 - `struts.multipart.maxSize`:设置整个请求的...
2. **更改上传框架**:如果需要更换其他的文件上传框架,可以通过修改`struts.multipart.parser`常量的值为`cos/pell`等来实现,并在lib目录下添加相应的上传组件类库。 3. **文件上传Action示例**:下面是一个简单...
在Struts2框架中,文件上传和下载的操作被简化并封装,使得开发者能够更加方便地实现这些功能。 首先,文件上传的原理基于HTML表单的enctype属性。当enctype设置为"multipart/form-data"时,表单数据将以二进制流的...
常见的选项有"cos"(使用COS文件上传库)、"pell"和"jakarta"(使用Apache Commons FileUpload)。如果选择"cos"或"pell",需要添加对应的库文件到Web应用的lib目录。 9. **struts.multipart.saveDir**: 指定上传...
对于使用JSP(JavaServer Pages)技术的开发者来说,实现文件上传的方法有很多,例如使用jspsmart公司的SmartUpload、Struts框架提供的组件等。本文将重点介绍如何使用Cos组件来实现文件上传功能。 #### Cos组件...
8. struts.multipart.parser:选择处理multipart/form-data类型的文件上传请求的框架,如cos、pell或jakarta。默认使用jakarta,但使用其他框架时需要添加相应的JAR文件到Web应用的lib目录。 9. struts.multipart....
- **示例**: `struts.multipart.parser=cos`表示使用Cos库处理文件上传。 - **注意事项**: 使用非默认值时需确保相应的库已添加到项目的类路径中。 **9. struts.multipart.saveDir** - **功能**: 指定上传文件的...
4. **配置Struts2**:在Struts2的配置文件(如struts.xml)中,为文件上传的Action添加相应的配置,指定其执行的方法和结果视图。例如: ```xml <result name="success">/success.jsp ``` 5. **处理异常**:...
- 在处理文件上传时,Struts2内部依赖于Apache Commons FileUpload组件(或其他支持的第三方组件如COS)来进行文件解析和处理工作。 2. **配置与集成** - 需要在项目的`WEB-INF/lib`目录下添加Apache Commons ...
- **struts.multipart.parser**:该属性指定处理`multipart/form-data` MIME类型的请求(主要用于文件上传)所使用的框架。默认值为`jakarta`,即使用`commons-fileupload`库。其他选项包括`cos`和`pell`,但使用...
8. `struts.multipart.parser`: 选择处理文件上传请求的解析器,如 `cos`, `pell` 或 `jakarta`,默认使用 `jakarta`,对应的库需要添加到项目的类路径中。 9. `struts.multipart.saveDir`: 设置上传文件的临时存储...
指定处理文件上传请求的框架,如`cos`、`pell`或`jakarta`,需根据选择的框架添加相应的依赖库。 #### 9. struts.multipart.saveDir 定义上传文件的临时存储目录,有助于管理文件上传过程中的资源占用。 #### 10. ...
此参数用于指定Struts2框架的配置类,默认值为`org.apache.struts2.config.DefaultConfiguration`。在Struts2框架初始化时,会实例化一个配置类来读取并解析各种配置信息。这涉及到框架的配置、组件的创建以及对各种...
5. **cos与Struts包的文件上传功能**:Cos (Commons-FileUpload) 是Apache的一个子项目,它为Java提供了一个处理文件上传的API。与Struts1结合使用,可以实现更灵活的文件上传功能。Cos库简化了文件上传的处理过程,...