基于Struts2的文件上传(转)

来源:互联网 发布:淘宝天天特价服装 编辑:程序博客网 时间:2024/06/05 02:20

1 文件上传的表单

<html>
  <head>
    <base href="<%=basePath%>">
    <title>Struts2文件上传</title>

  </head>
 
  <body>
   <center>
   <h1>Struts 2完成上传</h1>
   <form action="upload.action" method="post" enctype="multipart/form-data">
    <table>
     <tr>
      <td>用户名:</td>
      <td><input type="text" name="username" ></td>
     </tr>
     <tr>
      <td>上传文件:</td>
      <td><input type="file" name="myFile"></td>
     </tr>
     <tr>
      <td><input type="submit" value="上传"></td>
      <td><input type="reset"></td>
     </tr>
    </table>
   </form>
  </center>
  </body>
</html>

 

 

2 文件上传的Action

 

这里需要除了Struts本身需要的包以外,还有

commons-fileupload-1.2.1.jar

commons-io-1.4.jar

这两个包。

 

Action中字段必须遵守一下命名规则

private File xxx;封装该文件对应的文件内容。

private String xxxFileName;该文件的文件名称。

private String xxxContentType;该文件的文件类型。

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport

{
 // username属性用来封装用户名
 private String username;
 
 // myFile属性用来封装上传的文件
 private File myFile;
 
 // myFileContentType属性用来封装上传文件的类型
 private String myFileContentType;

 // myFileFileName属性用来封装上传文件的文件名
 private String myFileFileName;

 
 //获得username值
 public String getUsername() {
  return username;
 }

 //设置username值
 public void setUsername(String username) {
  this.username = username;
 }

 //获得myFile值
 public File getMyFile() {
  return myFile;
 }

 //设置myFile值
 public void setMyFile(File myFile) {
  this.myFile = myFile;
 }

 //获得myFileContentType值
 public String getMyFileContentType() {
  return myFileContentType;
 }

 //设置myFileContentType值
 public void setMyFileContentType(String myFileContentType) {
  this.myFileContentType = myFileContentType;
 }

 //获得myFileFileName值
 public String getMyFileFileName() {
  return myFileFileName;
 }

 //设置myFileFileName值
 public void setMyFileFileName(String myFileFileName) {
  this.myFileFileName = myFileFileName;
 }

 public String execute() throws Exception {
  
  //基于myFile创建一个文件输入流
  InputStream is = new FileInputStream(myFile);
  
  // 设置上传文件目录(这样设置的目录在tomcat中)
  String uploadPath = ServletActionContext.getServletContext()
    .getRealPath("/upload");
  
  // 设置目标文件
  File toFile = new File(uploadPath, this.getMyFileFileName());
  
  // 创建一个输出流
  OutputStream os = new FileOutputStream(toFile);

  //设置缓存
  byte[] buffer = new byte[1024];

  int length = 0;

  //读取myFile文件输出到toFile文件中
  while ((length = is.read(buffer)) > 0) {
   os.write(buffer, 0, length);
  }
  System.out.println("上传用户"+username);
  System.out.println("上传文件名"+myFileFileName);
  System.out.println("上传文件类型"+myFileContentType);
  //关闭输入流
  is.close();
  //关闭输出流
  os.close();
  return SUCCESS;
 }

}

 

 

3 Struts.xml

<struts>

 <package name="struts2" extends="struts-default">
  <action name="upload" class="net.hncu.struts2.action.UploadAction">

   <interceptor-ref name="fileUpload">
       <param name="allowedTypes"> application/msword</param>
       <param name="maximumSize">20000</param>
   </interceptor-ref>
   <interceptor-ref name="defaultStack"></interceptor-ref>


   <result name="success">/result.jsp</result>
   <result name="input">/upload.jsp</result>
  </action>
 </package>

</struts>

 

关于上传文件大小的控制,请参见:http://blog.sina.com.cn/s/blog_67aaf4440100ya3w.html

 原帖地址:http://ihanfeng.iteye.com/blog/834232


 

原创粉丝点击