Struts 中的文件上传[转贴]

                                                       Struts 中的文件上传[转贴]
 作者: 冷月公主 (原贴) http://www.xindonghong.com/blog/more.asp?name=wsq&id=666    冷月宫主

最近刚做完一个项目,用Struts1.1做的。从不懂,到熟练使用,都靠参考CSDN的一些文档。但是文章上讲的并不一定适合自己,所以我把我自己做的一些东西拿上来给大家看看,互相交流一下。如果您有跟好的方法,可以和我联系。
MSN:whw_dream (AT) hotmail.com

Struts的文件上传
本文用的是Struts1.1的org.apache.struts.upload.FormFile类。很方便,不用自己写。也不用写一个jsp调用jspsmartupload就可以搞定。

选择上传文件页面:selfile.jsp


<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<html:html>
<html:form action="/uploadsAction.do" enctype="multipart/form-data">
<html:file property="theFile"/>
<html:submit/>
</html:form>
</html:html>

UpLoadAction.java
import java.io.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;

/**
 * <p>Title:UpLoadAction</p>
 * <p>Description: QRRSMMS </p>
 * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
 * <p>Company: jiahansoft</p>
 * @author wanghw
 * @version 1.0
 */

public class UpLoadAction extends Action {
  public ActionForward execute(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response)
      throws Exception {
    if (form instanceof uploadsForm) {//如果form是uploadsForm
        String encoding = request.getCharacterEncoding();
        if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
        {
            response.setContentType("text/html; charset=gb2312");//如果没有指定编码,编码格式为gb2312
        }
        UpLoadForm theForm = (UpLoadForm ) form;
        FormFile file = theForm.getTheFile();//取得上传的文件
        try {
              InputStream stream = file.getInputStream();//把文件读入
              String filePath = request.getRealPath("/");//取当前系统路径
              ByteArrayOutputStream baos = new ByteArrayOutputStream();
              OutputStream bos = new FileOutputStream(filePath + "/" +file.getFileName());//建立一个上传文件的输出流
              //System.out.println(filePath+"/"+file.getFileName());
              int bytesRead = 0;
              byte[] buffer = new byte[8192];
              while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {
                bos.write(buffer, 0, bytesRead); //将文件写入服务器
          }
          bos.close();
          stream.close();
        }catch(Exception e){
          System.err.print(e);
        }
        //request.setAttribute("dat",file.getFileName());
        return mapping.findForward("display");
    }
    return null;
  }
}



UpLoadForm.java

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
import org.apache.struts.upload.*;

/**
 * <p>Title:UpLoadForm</p>
 * <p>Description: QRRSMMS </p>
 * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
 * <p>Company: jiahansoft</p>
 * @author wanghw
 * @version 1.0
 */

public class UpLoadForm extends ActionForm {
  public static final String   ERROR_PROPERTY_MAX_LENGTH_EXCEEDED=
                                                "org.apache.struts.webapp.upload.MaxLengthExceeded";
  protected FormFile theFile;
  public FormFile getTheFile() {
      return theFile;
  }
  public void setTheFile(FormFile theFile) {
      this.theFile = theFile;
  }
  public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
  {
      ActionErrors errors = null;
      //has the maximum length been exceeded?
      Boolean maxLengthExceeded = (Boolean)
              request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
      if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue()))
      {
          errors = new ActionErrors();
          errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED, new ActionError("maxLengthExceeded"));
      }
      return errors;

  }
}
//这是相对应的form,还有其他属性可以设置,具体可以参考struts的上传例子。



struts-config.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
  <form-beans>
    <form-bean name="uploadsForm" type="UpLoadForm" />
  </form-beans>
  <action-mappings>
    <action name="uploadsForm" type="UpLoadAction" path="/uploadsAction">
      <forward name="display" path="/display.jsp" />
    </action>
  </action-mappings>
</struts-config>
<!--display.jsp就是随便写一个成功页-->

阅读全文(32) | 回复(1) | 引用(0)
 


回复:Struts的文件上传

自已调试成功的:

提交页面:

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!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=gb2312">
<title>无标题文档</title>
</head>

<body>
<form name="form1" enctype="multipart/form-data" method="post" action="../upLoadAction.do">
  <input type="file" name="theFile">
  <input type="submit" name="Submit" value="提交">
</form>
</body>
</html>

 

ActionForm:

package com.taxiManager.actionform;

import org.apache.struts.action.*;
import javax.servlet.http.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.upload.*;

/**
 * <p>Title:UpLoadForm</p>
 * <p>Description: QRRSMMS </p>
 * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
 * <p>Company: jiahansoft</p>
 * @author wanghw
 * @version 1.0
 */

public class UpLoadForm
    extends ActionForm {
  public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED =
      "org.apache.struts.webapp.upload.MaxLengthExceeded";
  protected FormFile theFile;
  public FormFile getTheFile() {
    return theFile;
  }

  public void setTheFile(FormFile theFile) {
    this.theFile = theFile;
  }

  public ActionErrors validate(ActionMapping mapping,
                               HttpServletRequest request) {
    ActionErrors errors = null;
    //has the maximum length been exceeded?
    Boolean maxLengthExceeded = (Boolean)
        request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
    if ( (maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) {
      errors = new ActionErrors();
      errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED,new ActionError("maxLengthExceeded"));
    }
    return errors;

  }
}

Action:

package com.taxiManager.action;

import com.taxiManager.actionform.*;
import java.io.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;

public class UpLoadAction
    extends Action {
  public ActionForward perform(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) {
    UpLoadForm upLoadForm = (UpLoadForm) form;
    String filename = "";
    String fileserverpath = "";
    String fileurl = "";
    String host = "";
    if (form instanceof UpLoadForm) { //如果form是UpLoadForm
      String encoding = request.getCharacterEncoding();
      if ( (encoding != null) && (encoding.equalsIgnoreCase("utf-8"))) {
        response.setContentType("text/html; charset=gb2312"); //如果没有指定编码,编码格式为gb2312
      }
      UpLoadForm theForm = (UpLoadForm) form;
      FormFile file = theForm.getTheFile(); //取得上传的文件
      try {
        InputStream stream = file.getInputStream(); //把文件读入
        String filePath = request.getRealPath("/uploadfile/photo"); //取当前系统路径
        if(file.getFileName()!=null)
        filename = new String(file.getFileName().getBytes("ISO8859_1"), "gb2312");
        fileserverpath = filePath + "/" + filename;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        OutputStream bos = new FileOutputStream(fileserverpath); //建立一个上传文件的输出流
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {
          bos.write(buffer, 0, bytesRead); //将文件写入服务器
        }

        fileurl = "http://www."+request.getRemoteHost()+":"+request.getServerPort()+"/Taxi/uploadfile/photo/"+filename;
       
        System.out.println("存放的路径是:"+filePath);
        System.out.println("fileurl:"+fileurl);
        System.out.println("host:"+host);
       
        bos.close();
        stream.close();
      }
      catch (Exception e) {
        System.err.print("上传文件出现错误:"+e);
      }
    }
    request.setAttribute("dat",fileserverpath);   
    request.setAttribute("pic",fileurl);
    return mapping.findForward("forward");
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值