表单元素的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"是一个辅助开发者在SpringMVC环境中实现文件上传、Excel解析和下载功能的重要资源。通过结合相关的文章学习和使用这些库,可以有效地提高数据处理的效率和灵活性。在实际应用...
在ASP.NET开发中,"Word文档上传并解析内容"是一个常见的功能需求,它涉及到文件上传、Word文档处理以及用户界面的交互。以下是对这个主题的详细讲解。 首先,我们需要了解文件上传的基本流程。在ASP.NET中,我们...
通过以上步骤,我们可以构建一个完整的FTP文件传输系统,它不仅能上传和下载文件,还能解析CSV内容,对数据进行分析,并在出现问题时提供反馈和记录。这样的系统在数据处理、报告生成、自动化工作流等场景中非常有用...
在IT行业中,文件上传、下载和XML文件解析是常见的操作,尤其在Web应用程序和服务中扮演着重要角色。这里,我们将详细探讨这三个主题。 首先,**文件上传**是用户通过网络将本地计算机上的文件发送到服务器的过程。...
文件上传和下载是Web应用程序中的核心功能之一,无论是用户向服务器提交个人资料、分享文档,还是从服务器获取资源,如软件更新、电子书籍等,都离不开这一操作。在这个过程中,前端与后端的交互以及数据的安全传输...
在Java Web开发中,JSP(JavaServer Pages)常常用于创建动态网页,配合Servlet处理用户交互,例如文件的上传和下载。本项目专注于解决在JSP中实现文件上传和下载时遇到的一些常见问题,特别是针对中文文件名的处理...
总之,通过Apache HttpClient的POST方法和HttpMime库,我们可以方便地在Java应用中实现文件上传功能,并在服务器端进行有效的解析。这个过程涉及到网络通信、HTTP协议、文件处理等多个IT领域的知识点,对于开发涉及...
best20182022-10-17 14:55:20原证springboot整合easyexcel实现excel文件上传解析,下载导出简单实例 项目描述 springboot整合easyexcel,上传解析Excel,下载导出Excel 运行环境 jdk8+tomcat9+IntelliJ IDEA+...
在Java开发中,上传并解析Excel文件是一种常见的需求,特别是在数据处理、报表导入或系统集成等场景。本篇文章将深入探讨如何实现这个功能,主要涉及的技术包括文件上传、Excel解析以及数据库操作。 首先,我们需要...
在Java开发中,文件上传和下载是常见的功能需求,尤其在网络应用中,如网页、桌面应用或移动应用。为了实现这些功能,开发者通常需要引入特定的库或jar包。在这个场景下,"文件上传下载需要的jar包"指的是用于处理...
在Java Web开发中,文件上传和下载是常见的功能需求,特别是在构建交互性强的Web应用程序时。这个"javaweb文件上传与下载模块源代码"提供了一个实现这些功能的基础框架,对于初学者和Java程序员来说,这是一个很好的...
在Java编程领域,文件上传和下载是Web应用中常见的功能,尤其在用户交互丰富的网站或系统中。本项目通过一个简单的源码实例,演示了如何实现在JSP(JavaServer Pages)界面上处理文本和图片的上传与下载,涵盖了相关...
总结来说,Java提供了强大的工具来处理文件上传、解析Excel和CSV,以及将数据映射到Java Bean。理解这些概念和库的使用,将极大地提高你在实际项目中的效率。无论你是新手还是经验丰富的开发者,熟练掌握这些技能都...
spring boot多文件上传、单文件上传、Excel解析源码 ...springboot 单文件上传、多文件上传、Excel文件上传解析、Excel文件下载; 运行环境 jdk8+tomcat9+IntelliJ IDEA+maven 项目技术(必填) springboot+poi+html
本项目详细阐述了如何利用JSP实现文件的上传和下载功能。 首先,文件上传涉及的主要技术有HTML表单、Servlet和多部分请求。在HTML表单中,我们需要设置`<input type="file">`标签让用户选择要上传的文件。当用户...
在这个“java文件上传和上传excel后并解析出来的小工具”中,我们可以探讨以下几个核心知识点: 1. **MultipartFile接口**:在Spring框架中,`MultipartFile`接口用于处理HTTP请求中的多部分文件数据。它提供了读取...
在IT行业中,网页应用经常需要处理用户上传和下载文件的功能,包括图片和其他文档。本实例主要探讨如何使用JSP(JavaServer Pages)实现这一过程。JSP是Java平台上的动态网页技术,允许开发者将HTML代码与Java代码...
在IT行业中,文件上传并解析Excel以将数据存入数据库是一项常见的需求,特别是在数据分析、报表管理和数据导入导出等场景。本项目利用了Java技术栈中的Hibernate、SpringMVC和Spring框架来实现这一功能,下面将详细...
本案例将详细讲解如何在Apache环境下实现文件上传和下载。 首先,我们来看`web.xml`的配置部分,这是Java Web应用的部署描述符,用于定义Servlet及其映射。在这个案例中,有三个Servlet被定义:`...
在Java编程领域,文件上传和下载是常见的功能需求,尤其在网络应用中,如网页服务器、B/S架构系统等。这个实例提供了对文件上传下载过程的深入理解和实践操作。以下是关于"Java文件上传下载实例(含详细注释)"的详细...