Struts2和request上使用commons-fileupload的区别

一:struts2上传

1,配置struts2文件

    <struts>
<!-- struts常量定义 -->
<!-- 指定struts国际化资源文件的baseName -->
<constant name="struts.custom.i18n.resources" value="messageResource"/>
<!-- 指定每次HTTP请求时是否重新加载国际化资源文件,默认为false,开发阶段设为true -->
<constant name="struts.i18n.reload" value="true"/>
<!-- 配置应用的编码方式 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- struts.xml变更时是否自动重新加载 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 限定上传文件最大大小4M,struts2默认maxSize为2M -->
<constant name="struts.multipart.maxSize" value="4194304"></constant>
<!-- 指定上传文件时临时文件的存放路径,设为"/tempUpload"将在 项目所在盘下创建文件夹tempUpload-->
<constant name="struts.multipart.saveDir" value="/tempUpload"></constant>

        <!-- action 定义 -->
<package name="mystruts" extends="struts-default">
<action name="upload" class="com.petrochina.action.business.UploadAction">
<!-- 配置fileUpload拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型-->
<param name="allowedTypes">image/x-ms-bmp,image/jpeg,image/gif,image/png,image/x-png,application/excel,application/vnd.ms-excel</param> 
<!-- 配置允许上传的文件大小 -->
<param name="maximumSize">2048000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 配置上传文件的保存的相对路径 -->
<param name="savePath">/test</param>
<!-- 配置逻辑视图和实际资源的对应关系 -->
<result>/WEB-INF/content/business/upload.jsp</result>
<result name="input">/WEB-INF/content/business/upload-input.jsp</result>
</action>
</package>
</struts>

 2,编写上传页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>
标题:${title}
<br/>
文件:${fileFileName }
<br>
</body>
</html>

 3,在java中编写代码

package com.petrochina.action.business;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.io.IOUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private File file;// 对应文件域的file,封装文件内容
    private String fileContentType;// 封装文件类型
    private String fileFileName;// 封装文件名
    private String savePath;// 保存路径
    private String title;// 文件标题
    @Override
    public String execute() throws Exception {
        if (file != null) {
            // 读取文件内容到InputStream里
            InputStream is = new FileInputStream(getFile());
            // 创建输出流,生成新文件
            OutputStream os = new FileOutputStream(getSavePath() + "//" + getFileFileName());
            // 将InputStream里的byte拷贝到OutputStream
            IOUtils.copy(is, os);
            os.flush();
            IOUtils.closeQuietly(is);
            IOUtils.closeQuietly(os);
            return SUCCESS;
        }
        return INPUT;
    }

    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileContentType() {
        return fileContentType;
    }
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    public String getSavePath() {
        // 将相对路径转换成绝对路径
        return ServletActionContext.getServletContext().getRealPath(savePath);
    }
   public void setSavePath(String savePath) {
        this.savePath = savePath;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}

二、request上传
重点是三个步骤:a 创建文件工厂 b 使用servletFileUpload核心类解析Request c 使用FileItem类获取上传内容
//1 创建磁盘文件工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*1024);//文件上传缓存大小设定,单位为byte
String tempPath=this.getServletContext().getRealPath("temp");//磁盘缓存文件保存路径设定,这里设置为项目下temp文件夹绝对路径
factory.setRepository(new File(tempPath));//这两项设定也可以在构造函数中表现
   //2创建阿帕奇文件上传核心类
ServletFileUpload upload = new ServletFileUpload(factory);
//2.1判断form提交的是否是一个文件上传form
if(ServletFileUpload.isMultipartContent(request)){
try {
//2.2解析request为一个集合,元素为FileItem
List<FileItem> parseRequest = upload.parseRequest(request);
//2.3设置解析到的文件名编码格式
upload.setHeaderEncoding("UTF-8");
//2.4遍历解析集合,如果为文件,则
for(FileItem fileItem:parseRequest){
//判断是否文件,结果为“true”就是普通表单,如果为“false”则是文件
if(fileItem.isFormField()){
String fieldName = fileItem.getFieldName();//获取表单name属性名
System.out.println(fileItem.getString("UTF-8"));//获取表单value值,并设定编码方式
}else{
String name = fileItem.getName();//获取所上传文件的名称
InputStream in = fileItem.getInputStream();//获得上传文件字节流
//BufferedInputStream bis = new BufferedInputStream(in);
//创建输出文件
String outPath = this.getServletContext().getRealPath("uploadfolder/"+name);
FileOutputStream out = new FileOutputStream(new File(outPath));
//BufferedOutputStream bos = new BufferedOutputStream(out);
//使用IOUtils工具输出, 也就是copy文件
IOUtils.copy(in, out);
System.out.println("上传完毕");
//文件上传完毕,清空缓存资料夹内容
in.close();
out.close();
fileItem.delete();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}else{
//如果不是文件上传类型,则采用普通表单获取方式
request.setCharacterEncoding("UTF-8");
String parameter = request.getParameter("username");
System.out.println(parameter);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值