struts2 上传

struts中上传文件功能小测试。这里jar是 2.5 版本。

  1. 项目结构图

废话不多说,直接代码。

2. web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>struts2</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <filter>
    <filter-name>action2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>action2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

3.struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

	<!-- 启动动态方法匹配功能 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
	<!-- 启用开发模式 -->
    <constant name="struts.devMode" value="true"/>
    <!-- 默认上传大小2M,   -->
    <constant name="struts.multipart.maxSize" value="104857600"/>
    
    
    <package name="user" extends="struts-default" namespace="/">
    	<!--动态方法配置 -->
    	<global-allowed-methods>regex:.*</global-allowed-methods>
    
    	<action name="*_*" class="com.struts2.action.{1}" method="{2}">
    		<result name="success" type="redirect">
    			<param name="location">success.jsp</param>
   				<param name="parse">true</param>
	   			<param name="uploadFileName">${uploadFileName}</param>
    		</result>
    		<result name="error" type="redirect">
    			<param name="location">error.jsp</param>
	   			<param name="uploadFileName">${uploadFileName}</param>
    		</result>
    
    	</action>
    </package>
    
</struts>

4 TestUpload 上传功能具体实现

package com.struts2.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import org.apache.struts2.ServletActionContext;
/*
 * @auto :zws
 * @time 2017年5月24日 星期三
 * @method 文件上传功能
 *  注意: 前台上传文件 name 名称应该和后台保持一致 为 upload
 */

public class TestUpload {

	// 上传的文件二进制流
	private File upload;
	// 上传文件名称
	private String uploadFileName;
	// 上传文件类型
	private String uploadContentType;

	public File getUpload() {
		return upload;
	}

	public void setUpload(File upload) {
		this.upload = upload;
	}

	public String getUploadFileName() {
		return uploadFileName;
	}

	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}

	public String getUploadContentType() {
		return uploadContentType;
	}

	public void setUploadContentType(String uploadContentType) {
		this.uploadContentType = uploadContentType;
	}

	public String fileUpload() throws IOException{

		InputStream stream = null;
		OutputStream out = null;
		File file = null;

		System.out.println(this.uploadContentType);
		// 判断上传类型 这里只能上传 图片格式
		if(!"image/jpeg".equals(this.uploadContentType)){
			return "error";
		}else{
			try {
				// 上传文件名后缀 . 的下标
				int lf = this.uploadFileName.lastIndexOf(".");
				// 截取上传文件后缀
				String str = this.uploadFileName.substring(lf);
				// 获取时间,毫秒计时
				long time = new Date().getTime();
				// 文件上传真实路径
				String realPath = ServletActionContext.getServletContext().getRealPath("/upload");
				// 创建文件,用来判断是否存在
				file = new File(realPath);
				//判断upload 文件夹是否存在
				if(!file.exists() && !file.isDirectory()){
					// 创建upload 文件夹
					file.mkdir();
				}
				/* 
				 * 写入数据的地址
				 * 	注意    1. 这里应该是文件绝对路径名称,而不是文件夹绝对路径名称
				 * 		2. 为了避免文件命名冲突,应该给上传文件重命名
				 */
				stream = new FileInputStream(upload);
				out = new FileOutputStream(realPath+"\\"+time+str);
				// 每次写512字节
				byte[] by = new byte[512];
				int len = 0;
				while (true) {
					if((len=stream.read(by))==-1){
						break;
					}else{
						out.write(by, 0, len);
					}
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}finally {
				out.close();
				stream.close();
			}
		}
		return "success";
	}
}

5. 前台页面 index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!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>Insert title here</title>
</head>
<body>

	<h1 style="text-align: center;">~~~~~~~~~~~~~上传文件测试~~~~~~~~~~~~~~~</h1>
	<!-- 注意 请求方式一定是 post   必须有 enctype="multipart/form-data"  -->
	<s:form action="TestUpload_fileUpload" method="post" enctype="multipart/form-data">
    	<s:file name="upload" label="图片"/>
	    <s:submit label="提交"/>
	</s:form>
</body>
</html>

6.上传成功页面 success.jsp

<%@ 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>Insert title here</title>
</head>
<body>
	<h1 style="text-align: center;">~~~~~~~~~~~~~ ${param.uploadFileName}上传成功!~~~~~~~~~~~~~~~</h1>
</body>
</html>

7.上传失败页面 error.jsp

<%@ 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>Insert title here</title>
</head>
<body>
	<h1 style="text-align: center;">~~~~~~~~~~~~~${param.uploadFileName}上传失败!~~~~~~~~~~~~~~~</h1>
</body>
</html>

注意:

1.strtuts2 默认上传大小为2M,单位是字节,如需修改大小,配置为

这里修改为了 100M

<constant name="struts.multipart.maxSize" value="104857600"/>

2.前台页面 form中

请求方式为 :post

里面属性必须有:enctype="multipart/form-data"

3.上传过滤,可以根据自己需求来拦截

4.上传为了出现名称一直,应该重新命名

如果欠缺,多多指导。

时间: 2024-10-10 16:25:56

struts2 上传的相关文章

Struts2 上传下载

后台代码: public String getFileName() { String fileName = this.getRequest().getParameter("fileName"); String downloadFileName = fileName; try { } catch (Exception e) { e.printStackTrace(); } return downloadFileName; } // 下载的流 public InputStream getI

struts2上传

关于jsp如何实现文件上传,未来将有博主将有代码贴出来,现在讨论下struts下的文件上传及下载 struts2文件上传技术原理: 1.struts2文件上传的底层支持在struts.properties配置文件中,配置struts2上传文件时的上传解析器:struts.multipart.parser=cos指定使用cos的文件上传解析器struts.multipart.parser=pell指定使用pell的文件上传解析器struts.multipart.parser=jakarta   

struts2上传的问题

5. 在这里我加一个struts2的一个上传验证的问题 上传时我们可以这样来验证 //判断上传的文件是否合要求 public boolean filterType(String []types){ //这里用的是 上传的file对象的方法length //上传的类型都是二进制,所以我们就自己找后缀名 String fileType = uploadUtil.getExt(); for(String type : types){ if(! type.equals(fileType)){ retur

struts2上传下载

struts上传下载必须引入两个jar文件: commons-fileupload-x.x.x.jar和comons-io-x.x.x.jar上传文件 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.

struts2上传文件

1.upload.java(java文件上传的读写方法) package com.OS.util; 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 co

[JavaWeb基础] 009.Struts2 上传文件

在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因为文件上传时二进制文件可能会很大,还有就是enctype属性, 这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端 --> <form action="fileUpload.action" method="post"

struts2 上传文件

web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schem

工作笔记4.struts2上传文件到server

本文介绍两种:上传文件到server的方式   一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完毕文件上传,我们应该将这两个表单域所在表单的enctype属性设置为multipart/form-data. <form action="uploadFiles_fourInsuranceFirstUpload.action" method="post" enctype="mu

工作笔记4.struts2上传文件到服务器

本文介绍两种:上传文件到服务器的方式   一种是提交Form表单:另一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完成文件上传,我们应该将这两个表单域所在表单的enctype属性设置为multipart/form-data. <form action="uploadFiles_fourInsuranceFirstUpload.action" method="post" enctype="multip

java struts2 上传文件范例

Struts2 default.properites属性文件相关说明 struts.i18n.encoding=UTF-8 国际化默认编码格式为UTF-8 struts.objectFactory = spring spring整合时需要使用 ### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data # struts.multipart.parser=cos # struts.