`
wuhaidong
  • 浏览: 357810 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

文件上传和下载解析

阅读更多

表单元素的enctype属性:
application/x-www-form-urlencoded(默认)

1)默认编码方式,只处理表单域里的value属性值。

2)可通过request.getParameter()方法取得请求的参数。

multipart/form-data

1)以二进制流的方式处理表单数据,且会将文件域指定的文件内容也封装到请求参数里。

2)无法通过request.getParameter()方法取得请求的参数。

 

 

struts2的文件上传(action属性):

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

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

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

 

 

fileUpload拦截器:

allowedTypes属性:指定允许上传的文件类型。多文件用","

maximumSize属性:指定允许上传文件的大小。单位是字节。

过滤失败,返回input 逻辑视图。

需要显示的配置defaultStack 拦截器栈

 

 

文件上传的常量配置:

struts.multipart.saveDir:上传文件的临时文件夹。

默认使用javax.servlet.context.tempdir.

此临时文件夹在Tomcat的work\Catalina\localhost\下

应避免使用Tomcat的工作路径作为临时路径

struts.multipart.maxSize:上传文件的最大字节数。

可控制整个struts2应用里的上传文件的大小。

 

 

输出错误提示:

-<s:fileError/>

国际化错误提示的key

struts.message.error.file.too.large:上传文件过大。

struts.message.error.content.type.not.allowed:上传类型错误。

struts.message.error.uploading:文件上传出现未知错误。

 

 

文件下载

stream结果类型

contentType属性:指定被下载文件的文件类型。

inputName属性:指定被下载文件的入口输入流。

contentDisposition:

指定下载文件的处理方式(内联(inline)和附件(attachment))。

通过filename指定下载文件的文件名。

bufferSize属性:指定下载文件时的缓冲大小。

 

 

<form action="load_doPictureUpload.action" enctype="multipart/form-data" method="post">
	<table>
		<tr>
			<td>上传图片:</td>
			<td><input type="file" name="picture"/></td>
		</tr>
		<tr>
			<td><input type="submit" value="上传"/></td>
		</tr>
	</table>
</form>

 

 

 

文件名称:<a href="load_doDownPicture.action">下载</a>
 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd" >
<struts>
	<!-- 程序国际化 指定国际化资源文件-->
	<constant name="struts.custom.i18n.resources" value="ApplicationResources"/>
	<!-- 指定request 和 response中的编码方式,相当于request.setCharacterEncoding("utf-8")
	     和response.setCharacterEncoding("utf-8") -->
	<constant name="struts.i18n.encoding" value="utf-8"/>
	<!-- 是否国际化信息自动加载 默认为false -->
	<constant name="struts.i18n.reload" value="false"/>
	<!-- 设置上传文件时不要Tomcat的临时路径,使用设置的值 -->
	<constant name="struts.multipart.saveDir" value="/"/>
	<!-- 设置上传文件大小,此处设置会对起最后的限制作用! -->
	<constant name="struts.multipart.maxSize" value="10485760"/>
	<!-- 该属性指定需要struts2 处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由struts处理
		如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开-->
	<constant name="struts.action.extension" value="action"/>
	<!-- 设置浏览器是否缓存静态内容,默认值为true(生成环境下使用),开发阶段最好关闭 -->
	<constant name="struts.serve.static.browserCache" value="false"/>
	<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生成环境下使用),开发阶段最好打开 -->
	<constant name="struts.configuration.xml.reload" value="true"/>
	<!-- 开发模式下使用,这样可以 打印出更详细的错误信息 -->
	<constant name="struts.devMode" value="true"/>
	<!-- 默认的试图主题 -->
	<constant name="struts.ui.theme" value="simple"/>
	
	<package name="package-default" extends="json-default" abstract="true">
		<!-- 配置公共results -->
		<global-results>
			<!-- json 回调 -->
			<result name="jsonback" type="json">
				<param name="includeProperties">status</param>
			</result>
			<result name="error">/</result>
		</global-results>
		<!-- 异常处理 -->
		<global-exception-mappings>
			<exception-mapping result="error" exception="java.lang.Exception"/>
		</global-exception-mappings>
	</package>
	
	<!-- 通过include元素导入其他配置文件 -->
	<include file="strutsxml/struts_*.xml"/>
</struts>
 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd" >
<struts>
	<package name="picture" extends="package-default">
		<action name="load_*" class="org.cric.action.LoadAction" method="{1}">
			<!-- 配置fileUpload的拦截器 -->
			<interceptor-ref name="fileUpload">
				<!-- 配置允许上传的文件的大小(字节) -->
				<param name="maximumSize">389377</param>
				<!-- 配置允许上传出的文件类型 -->
				<param name="allowedTypes">image/png,image/gif,image/jpeg</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack"/>
			<result name="input">/error.jsp</result>
			<result>/ok.jsp</result>
			
			<result name="down" type="stream">
				<!-- 指定下载文件的文件类型 -->
				<param name="contentType">image/gif</param>
				<!-- 指定由getTageFile()方法返回被下载文件的InputStream -->
				<param name="inputName">inputStream</param>
				<param name="contentDisposition">attachment;filename="${fileName}"</param>
				<!-- 指定下载文件时的缓冲 -->
				<param name="bufferSize">2048</param>
			</result>
		</action>
	</package>
</struts>

 

 

 

package org.cric.action;

import java.io.File;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import org.cric.util.ImgWriteUtil;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class LoadAction extends ActionSupport {
	
	private File picture;//封装文件域对应的文件内容
	private String pictureFileName;//该文件的文件名称
	private String pictureContentType;//该文件的文件类型
	private String image;
	private String fileName;
	private InputStream inputStream;
	
	public InputStream getInputStream() {
		return inputStream;
	}
	public void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}
	public String getFileName() {
		return fileName;
	}
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
	public String getImage() {
		return image;
	}
	public void setImage(String image) {
		this.image = image;
	}
	public File getPicture() {
		return picture;
	}
	public void setPicture(File picture) {
		this.picture = picture;
	}
	public String getPictureFileName() {
		return pictureFileName;
	}
	public void setPictureFileName(String pictureFileName) {
		this.pictureFileName = pictureFileName;
	}
	public String getPictureContentType() {
		return pictureContentType;
	}
	public void setPictureContentType(String pictureContentType) {
		this.pictureContentType = pictureContentType;
	}
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	public String doPictureUpload() throws Exception{
		String pathStr=ServletActionContext.getRequest().getRealPath("/image");//获取项目实际运行的路径
		String endStr=this.getPictureFileName().substring(this.getPictureFileName().lastIndexOf("."));//获取图片的后缀名
		String nameStr=String.valueOf(System.currentTimeMillis());//获取名称
		String picturePath=pathStr+"/"+nameStr+endStr;
		File toFile=new File(picturePath);
		ImgWriteUtil imgWriteUtil = new ImgWriteUtil();
		imgWriteUtil.writeImg(picture, toFile);
		this.image="image/"+nameStr+endStr;
		return Action.SUCCESS;
	}
	public String doDownPicture() throws Exception{
		fileName="中文.gif";
		fileName=new String(fileName.getBytes("GB2312"),"ISO8859-1");
		this.setInputStream(ServletActionContext.getServletContext().getResourceAsStream("/image/1287400068000.gif"));
		return "down";
	}
}
 

 

 

 

/**
 * 写入图片
 */
package org.cric.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class ImgWriteUtil {
	private BufferedInputStream bis;
	private BufferedOutputStream bos;

	public void writeImg(File fromfile, File tofile) {// 写入图片
		int len = 0;
		int size = 0;
		try {
			bis = new BufferedInputStream(new FileInputStream(fromfile));
			bos = new BufferedOutputStream(new FileOutputStream(tofile));
			size = (int) fromfile.length();
			byte[] buffer = new byte[size];
			while ((len = bis.read(buffer)) > 0) {
				bos.write(buffer, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException("创建文件时出错!");
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("读写文件时出错!");
		} finally {
			try {
				if (bos != null) {
					bos.close();
				}
				if (bis != null) {
					bis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
分享到:
评论

相关推荐

    文件上传Excel解析相关的jar

    总的来说,"文件上传Excel解析相关的jar"是一个辅助开发者在SpringMVC环境中实现文件上传、Excel解析和下载功能的重要资源。通过结合相关的文章学习和使用这些库,可以有效地提高数据处理的效率和灵活性。在实际应用...

    Word文档上传并解析内容

    在ASP.NET开发中,"Word文档上传并解析内容"是一个常见的功能需求,它涉及到文件上传、Word文档处理以及用户界面的交互。以下是对这个主题的详细讲解。 首先,我们需要了解文件上传的基本流程。在ASP.NET中,我们...

    完整实现ftp上传与下载并解析csv文件

    通过以上步骤,我们可以构建一个完整的FTP文件传输系统,它不仅能上传和下载文件,还能解析CSV内容,对数据进行分析,并在出现问题时提供反馈和记录。这样的系统在数据处理、报告生成、自动化工作流等场景中非常有用...

    文件上传,下载,解析xml文件

    在IT行业中,文件上传、下载和XML文件解析是常见的操作,尤其在Web应用程序和服务中扮演着重要角色。这里,我们将详细探讨这三个主题。 首先,**文件上传**是用户通过网络将本地计算机上的文件发送到服务器的过程。...

    文件上传和下载文件上传和下载文件上传和下载

    文件上传和下载是Web应用程序中的核心功能之一,无论是用户向服务器提交个人资料、分享文档,还是从服务器获取资源,如软件更新、电子书籍等,都离不开这一操作。在这个过程中,前端与后端的交互以及数据的安全传输...

    jsp文件的上传和下载

    在Java Web开发中,JSP(JavaServer Pages)常常用于创建动态网页,配合Servlet处理用户交互,例如文件的上传和下载。本项目专注于解决在JSP中实现文件上传和下载时遇到的一些常见问题,特别是针对中文文件名的处理...

    上传文件的服务器的解析工具

    总之,通过Apache HttpClient的POST方法和HttpMime库,我们可以方便地在Java应用中实现文件上传功能,并在服务器端进行有效的解析。这个过程涉及到网络通信、HTTP协议、文件处理等多个IT领域的知识点,对于开发涉及...

    springboot整合easyexcel实现excel文件上传解析,下载导出简单实例.zip

    best20182022-10-17 14:55:20原证springboot整合easyexcel实现excel文件上传解析,下载导出简单实例 项目描述 springboot整合easyexcel,上传解析Excel,下载导出Excel 运行环境 jdk8+tomcat9+IntelliJ IDEA+...

    java上传excel并且解析入库

    在Java开发中,上传并解析Excel文件是一种常见的需求,特别是在数据处理、报表导入或系统集成等场景。本篇文章将深入探讨如何实现这个功能,主要涉及的技术包括文件上传、Excel解析以及数据库操作。 首先,我们需要...

    文件上传下载需要的jar包 java文件上传下载

    在Java开发中,文件上传和下载是常见的功能需求,尤其在网络应用中,如网页、桌面应用或移动应用。为了实现这些功能,开发者通常需要引入特定的库或jar包。在这个场景下,"文件上传下载需要的jar包"指的是用于处理...

    javaweb文件上传与下载模块源代码

    在Java Web开发中,文件上传和下载是常见的功能需求,特别是在构建交互性强的Web应用程序时。这个"javaweb文件上传与下载模块源代码"提供了一个实现这些功能的基础框架,对于初学者和Java程序员来说,这是一个很好的...

    java文件上传和下载功能

    在Java编程领域,文件上传和下载是Web应用中常见的功能,尤其在用户交互丰富的网站或系统中。本项目通过一个简单的源码实例,演示了如何实现在JSP(JavaServer Pages)界面上处理文本和图片的上传与下载,涵盖了相关...

    文件上传,java解析excel和csv 转javabean

    总结来说,Java提供了强大的工具来处理文件上传、解析Excel和CSV,以及将数据映射到Java Bean。理解这些概念和库的使用,将极大地提高你在实际项目中的效率。无论你是新手还是经验丰富的开发者,熟练掌握这些技能都...

    spring boot多文件上传、单文件上传、Excel解析源码.zip

    spring boot多文件上传、单文件上传、Excel解析源码 ...springboot 单文件上传、多文件上传、Excel文件上传解析、Excel文件下载; 运行环境 jdk8+tomcat9+IntelliJ IDEA+maven 项目技术(必填) springboot+poi+html

    基于jsp的文件上传下载

    本项目详细阐述了如何利用JSP实现文件的上传和下载功能。 首先,文件上传涉及的主要技术有HTML表单、Servlet和多部分请求。在HTML表单中,我们需要设置`&lt;input type="file"&gt;`标签让用户选择要上传的文件。当用户...

    java文件上传和上传excel后并解析出来的小工具

    在这个“java文件上传和上传excel后并解析出来的小工具”中,我们可以探讨以下几个核心知识点: 1. **MultipartFile接口**:在Spring框架中,`MultipartFile`接口用于处理HTTP请求中的多部分文件数据。它提供了读取...

    上传下载一个JSP上传图片和文件实例

    在IT行业中,网页应用经常需要处理用户上传和下载文件的功能,包括图片和其他文档。本实例主要探讨如何使用JSP(JavaServer Pages)实现这一过程。JSP是Java平台上的动态网页技术,允许开发者将HTML代码与Java代码...

    文件上传并解析Excel读取到数据库

    在IT行业中,文件上传并解析Excel以将数据存入数据库是一项常见的需求,特别是在数据分析、报表管理和数据导入导出等场景。本项目利用了Java技术栈中的Hibernate、SpringMVC和Spring框架来实现这一功能,下面将详细...

    Apache 文件上传与文件下载案例详解

    本案例将详细讲解如何在Apache环境下实现文件上传和下载。 首先,我们来看`web.xml`的配置部分,这是Java Web应用的部署描述符,用于定义Servlet及其映射。在这个案例中,有三个Servlet被定义:`...

    Java文件上传下载实例(含详细注释)

    在Java编程领域,文件上传和下载是常见的功能需求,尤其在网络应用中,如网页服务器、B/S架构系统等。这个实例提供了对文件上传下载过程的深入理解和实践操作。以下是关于"Java文件上传下载实例(含详细注释)"的详细...

Global site tag (gtag.js) - Google Analytics