第五课 文件上传

本篇博客详细讲解如何在Web应用中实现文件上传功能,通过action处理页面,掌握文件上传的关键步骤和技术要点。
摘要由CSDN通过智能技术生成
上传文件页面,
<!---------------------文件名:upload.jsp----------------->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
		<title>上传文件</title>
	</head>
	<body>
	<!-- 上传文件表单定义 -->
	<s:form action="AddCommodityAction" method="post" enctype="multipart/form-data">
		<tr>
	<!-- 上传文件标签定义 -->
	<td>上传文件:<input type="file" name="uploadImage"></td> </tr>
	<tr>
	<td align="left"><s:submit name="submit" value="提交"></s:submit></td>
	</tr>
	</s:form>
	</body>
</html>

 action处理页面

package com.jing.action;

import java.io.File;
import java.io.IOException;
import java.util.*;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.jing.dao.*;
import com.jing.po.*;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class AddCommodityAction extends ActionSupport{
 private List<CommodityClass> commodityClass;
    private CommodityClassDao commodityClassDao;
    private CommodityDao  commodityDao;
    
 private String commodityName;   //商品名称
  private String commodityClassName; //商品种类
 private String manufacturer;   //生产厂家
 private String commodityDesc;   //商品描述
 private Double commodityPrice;   //商品价格
 private Double EPrice;     //网上价格
 private File uploadImage;     //临时文件
 private String uploadImageContentType;  //上传图片临时文件 类型
 private String uploadImageFileName;   //上传图片临时文件 真实文件名
   
   
 
 

    public String execute() {
     //上传文件开始
     String realPath=ServletActionContext.getServletContext().getRealPath("admin/uploadImages");
     System.out.println("RealPath---:"+realPath);
       String dir=null;
      if (uploadImage != null) {
       File  savefile = new File(new File(realPath), uploadImageFileName);
               dir = savefile.getPath();
               System.out.println("dir---:"+dir);
             if (!savefile.getParentFile().exists())
                 savefile.getParentFile().mkdirs();
             try {
    FileUtils.copyFile(uploadImage, savefile);
   } catch (IOException e) {
    e.printStackTrace();
   }
         }
     //上传文件结束
      //保存商品数据到数据库 start
      Commodity commodity = new Commodity();
      commodity.setCommodityName(commodityName);
      commodity.setCommodityClassName(commodityClassName);
      commodity.setManufacturer(manufacturer);
      commodity.setCommodityDesc(commodityDesc);
      commodity.setCommodityPrice(commodityPrice);
      commodity.setEPrice(EPrice);
      commodity.setImage(dir);
      commodityDao.save(commodity);
     //保存商品数据 end
     System.out.println("commodityName---:"+commodityName);
     System.out.println("commodityClassName---:"+commodityClassName);
     System.out.println("uploadImage---:"+uploadImage);
     System.out.println("dir---:"+dir);
     System.out.println("uploadImageContentType---:"+uploadImageContentType);
     System.out.println("uploadImageFileName---:"+uploadImageFileName);
     return SUCCESS;
    }
 
 
  public String getCommodityClassName() {
  return commodityClassName;
 }
 public void setCommodityClassName(String commodityClassName) {
  this.commodityClassName = commodityClassName;
 }
 public String getCommodityName() {
  return commodityName;
 }
 public void setCommodityName(String commodityName) {
  this.commodityName = commodityName;
 }
 public String getManufacturer() {
  return manufacturer;
 }
 public void setManufacturer(String manufacturer) {
  this.manufacturer = manufacturer;
 }
 public String getCommodityDesc() {
  return commodityDesc;
 }
 public void setCommodityDesc(String commodityDesc) {
  this.commodityDesc = commodityDesc;
 }
 public Double getCommodityPrice() {
  return commodityPrice;
 }
 public void setCommodityPrice(Double commodityPrice) {
  this.commodityPrice = commodityPrice;
 }
 public Double getEPrice() {
  return EPrice;
 }
 public void setEPrice(Double ePrice) {
  EPrice = ePrice;
 }
 public File getUploadImage() {
  return uploadImage;
 }
 public void setUploadImage(File uploadImage) {
  this.uploadImage = uploadImage;
 }
 public String getUploadImageContentType() {
  return uploadImageContentType;
 }
 public void setUploadImageContentType(String uploadImageContentType) {
  this.uploadImageContentType = uploadImageContentType;
 }
 public String getUploadImageFileName() {
  return uploadImageFileName;
 }
 public void setUploadImageFileName(String uploadImageFileName) {
  this.uploadImageFileName = uploadImageFileName;
 }
 
 public void setCommodityClassDao(CommodityClassDao commodityClassDao) {
  this.commodityClassDao = commodityClassDao;
    }
  public List<CommodityClass> getCommodityClass() {
   return commodityClass;
  }
  public void setCommodityClass(List<CommodityClass> commodityClass) {
   this.commodityClass = commodityClass;
  }

  public void setCommodityDao(CommodityDao commodityDao) {
   this.commodityDao = commodityDao;
  }
 
 
}

struts.xml文件
<!-----------------------文件名:struts.xml------------------>   
<struts>   
    <!-- Action所在包定义 -->   
    <package name="C04.4" extends="struts-default">   
        <!-- Action名字,类以及导航页面定义 -->   
        <!-- 通过Action类处理才导航的的Action定义 -->   
        <action name="AddCommodityAction" class="com.jing.action.AddCommodityAction">   
            <result name="input">/jsp/upload.jsp</result>   
            <result name="success">/jsp/result.jsp</result>   
        </action>   
<!—显示配置文件上传拦截器 -->   
<interceptor-ref name=”fileUpload”>   
<!—指定特定类型的上传文件 -->   
<param name =”allowedTypes”>text/plain,application/xml</param>   
</ interceptor-ref >   
<interceptor-ref name=”defaultStack”></ interceptor-ref >   
    </package>   
</struts>   


定义了一个名为“allowedTypes”的参数,其中在<param></param>之间的是文件类型,也可以用“,”间隔,表示允许上传多个文件类型。这里允许上传文件类型为txt、xml格式的文件。如果读者不知道各个文件类型的定义,可在自己的JBoss安装目录中的server\default\deploy\jboss-web.deployer\conf\下的web.xml文件中找到(搜索<mime-mapping>即可)。注意:如果显示配置Struts2自己的缺省拦截器一定要写在“defaultStack”前,否则“fileUpload”拦截器不会执行拦截。因为Struts2中如果某个拦截器执行拦截时候发现自己已经执行过,第二个乃至之后同名的拦截器都不会执行。这里因为“defaultStack”拦截器栈中包含了“fileUpload”拦截器,而“fileUpload”拦截器已经执行拦截了,则不会再执行拦截。如果把“defaultStack”拦截器栈放在“fileUpload”拦截器前配置,则只执行“defaultStack”拦截器栈中的“fileUpload”拦截器,这里是没有定义“allowedTypes”的,Struts2缺省默认的是支持所有文件类型。因此它会支持所有文件类型的文件上传。因此再设定“allowedTypes”就没有任何意义了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值