Struts2day04Struts2.0文件的上傳

1、在服務器端提供一個文件夾存放提交的文件,upload文件夾,位於WebRoot下面

2.在upload.jsp頁面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>文件上傳</title>
  </head>
  <body>
  <center>
	<h1>文件上傳</h1>
    <form action="upload.action" method="post" enctype="multipart/form-data">  
    	文件上傳:<input type="file" name="pic"/><br>
    	<input type="submit" value="Submit"/>
    </form>
   </center>
  </body>
</html>

 3.寫一個Action類,FileUploadAction extends ActionSupport

package com.jsu.struts2.action;

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

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport implements
		ServletRequestAware {
	private File pic;// 提交的數據類型是文件
	/*
	 * Struts2.0框架中獲得上傳文件的名稱 在頁面中如果定義了 <file name="xxx"/> 文件名稱的屬性必須定義成
	 * xxxFileName
	 */
	private String picFileName;
	/* 文件的類型 */
	private String picContentType;
	private HttpServletRequest request;

	public String execute() throws Exception {
		System.out.println("File===" + pic);
		System.out.println("文件名稱====" + picFileName);
		System.out.println("文件類型====" + picContentType);
		// File 獲得是臨時文件
		FileInputStream io = new FileInputStream(pic);
		// 文件路徑問題
		/* ServletContext由邏輯路徑獲得物理路徑 */
       ServletContext ctx=request.getSession().getServletContext();
       String path=ctx.getRealPath("/upload");//由邏輯路徑獲得絕對路徑
		FileOutputStream out = new FileOutputStream(path+"\\"+picFileName);
		byte[] b = new byte[1024];// 1k
		int len = 0;
		while (true) {
			len = io.read(b);
			if (len < 0)
				break;
			out.write(b, 0, len);
		}
		out.close();
		io.close();
		return SUCCESS;
	}

	public File getPic() {
		return pic;
	}

	public void setPic(File pic) {
		this.pic = pic;
	}

	public String getPicFileName() {
		return picFileName;
	}

	public void setPicFileName(String picFileName) {
		this.picFileName = picFileName;
	}

	public String getPicContentType() {
		return picContentType;
	}

	public void setPicContentType(String picContentType) {
		this.picContentType = picContentType;
	}

	public void setServletRequest(HttpServletRequest request) {
		this.request = request;

	}

}

 4.error.jsp頁面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> </head>
  <body>
    Error:
    <s:fielderror></s:fielderror>
  </body>
</html>

5.在struts.xml中配置

<struts>
	<constant name="struts.custom.i18n.resources" value="myRes"/> 
	<package name="loginDemo" namespace="/" extends="struts-default">
	<!-- 文件的上傳 -->
       <action name="upload" class="com.jsu.struts2.action.FileUpAction">
	<!-- 使用Struts2.0 fileUpload攔截器限定文件的大小和類型 -->
	    <interceptor-ref name="fileUpload">
		<!-- 文件的最大值 -->
		<param name="maximumSize">2048000</param>
	<!-- 設置文件上傳的類型 IE消息頭解析圖片爲pjpeg,所以加爲pjpeg-->
		<param name="allowedTypes">image/jpeg,image/gif,image/pjpeg</param>
	</interceptor-ref>
	<interceptor-ref name="defaultStack"/>
	<result>/upload.jsp</result>
	<result name="input">/error.jsp</result>
	</action>
	</package>
</struts>

 6. src 提供 struts.properties 配置文件 一般在 strusts 核心 jar 包裏面的 defalut.xml 文件中找

    struts.multipart.saveDir=

    struts.multipart.maxSize= 2097152

    struts.properties 文件中的內容

 

#修改臨時文件存放的路徑,如果該目錄不存在則創建
struts.multipart.saveDir=D:\\temp
#全侷限定文件的大小,默認爲2M
struts.multipart.maxSize=2097152
 

7.修改文件上傳異常的錯誤信息

   1. src 中創建資源文件

   2. myRes.properties

   3. struts-default.xml 文件中找或者在 java 代碼中查看源碼

//上傳文件太大
struts.messages.error.file.too.large=\u4E0A\u4F20\u7684\u6587\u4EF6\u592A\u5927
//上傳的文件類型不允許
struts.messages.error.content.type.not.allowed=\u53EA\u80FD\u4E0A\u4F20\u56FE\u7247
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章