Apache、struts1、struts2文件上传下载的3种方式
//用Apache的SmartUpload方式上传,共5部
//1.引入SmartUpload
SmartUpload su = new SmartUpload();
//2.设定允许上传的文件类型,格式之间用逗号隔开
su.setAllowedFilesList("jpg,jpeg,gif");
//3.设定允许上传的文件的大小
su.setMaxFileSize(3*1024*1024);
//4.初始化接收页面提交过来的请求
su.initialize(this.getServletConfig(), request, response);
//5.上传
su.upload();
//注意:使用SmartUpload这种上传方式,接收页面请求不能使用HttpServletRequest
//务必使用SmartUpload自带的Request,否则接收全部为空
Request myreq = su.getRequest();
String name = myreq.getParameter("myname");
String pass = myreq.getParameter("mypass");
//设定要另存为的地址
java.io.File myfile = new java.io.File(this.getServletContext().getRealPath("/images"));
//如果路径不存在
if(!myfile.exists()){
//创建一个路径
myfile.mkdir();
}
//获取上传文件的对象
//获取所有上传文件的对象
Files files = su.getFiles();
//获取当前上传的文件,0表示获取第一个
File file = files.getFile(0);
//获取文件名
String fileName = file.getFileName();
//获取后缀名
String fileExt = file.getFileExt();
//获取文件大小
int fileSize = file.getSize();
//重新组合一个文件名使用uuid
String trueName = new UUIDGenerator().generate()+"."+fileExt;
//设定上传文件的最终保存路径
// /images/6598564265859453621595684585956.jpg
String finalPath = "/"+myfile.getName()+"/"+trueName;
//另存为
file.saveAs(finalPath);
//==============================================================================================================================================
/*struts1的上传与下载*/
/*struts1的上传:*/
//index.jsp中
<form action="upload.do" method = "post" enctype = "multipart/form-data">
上传文件:<input type = "file" name = "up" />
<br/>
<input type = "submit" value = "上传" />
</form>
//struts-config.xml文件中
<struts-config>
<data-sources />
<form-beans>
<form-bean name="check" type="com.etoak.form.MyActionForm"></form-bean>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
<action path="/upload" name = "check" type = "com.etoak.action.MyAction">
<forward name="suc" path="/show.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="com.etoak.struts.ApplicationResources" />
</struts-config>
//ActionForm:
public class MyActionForm extends ActionForm{
//上传文件的类型为FormFile,注意setter方法对应的name值
private FormFile myfile;
public FormFile getMyfile() {
return myfile;
}
public void setUp(FormFile myfile) {
this.myfile = myfile;
}
//软编码
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
try {
request.setCharacterEncoding("utf-8");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
super.reset(mapping, request);
}
}
//Action:
public class MyAction extends Action{
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获取上传文件
MyActionForm myform = (MyActionForm)form;
//myfile就是用户上传的文件的实例
FormFile myfile = myform.getMyfile();
//获取上传文件的全名
String fileName = myfile.getFileName();
//设置文件上传后另存为的路径
File file = new File(request.getSession().getServletContext().getRealPath("images"));
//如果路径不存在
if(!file.exists()){
//创建路径
file.mkdir();
}
//设置一个输入流
InputStream is = myfile.getInputStream();
//设置一个输出流
OutputStream os = new FileOutputStream(file+"/"+fileName);
int len;
byte[] b = new byte[1024];
while((len=is.read(b))!=-1){
os.write(b,0,len);
}
os.flush();
os.close();
return mapping.findForward("suc");
}
}
//------------------------------------------
/*struts1的下载*/
/*index.jsp中*/
<form action="download.do" method = "post">
下载文件名:<input type = "text" name = "filename" />
<br/>
<input type = "submit" value = "确定" />
</form>
struts-config.xml文件中
<struts-config>
<form-beans>
<!--这里用的动态表单-->
<form-bean name="down" type="org.apache.struts.action.DynaActionForm">
<form-property name="filename" type="java.lang.String"></form-property>
</form-bean>
</form-beans>
<action-mappings>
<action path="/download" type = "com.etoak.action.MyDownAction" name = "down"></action>
</action-mappings>
<message-resources parameter="com.etoak.struts.ApplicationResources" />
</struts-config>
Action:
public class MyDownAction extends DownloadAction{
@Override
protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
//获取要下载的文件名
DynaActionForm myform = (DynaActionForm)form;
String filename = myform.getString("filename");
//设置文件的下载路径
final String path = request.getSession().getServletContext().getRealPath("/images")+"/"+filename;
//要下载文件,首先要提交给浏览器头信息
//attachment表示使用附件来下载,浏览器会给予一个提示
//online:浏览器自动打开要下载的文件
response.setHeader("content-Disposition", "attachment;filename="+ new String(filename.getBytes("utf-8"),"iso-8859-1"));
return new DownloadAction.StreamInfo(){
public String getContentType() {
//设置允许下载的文件类型
//这个类型是MIME数据类型,application/file表示任何数据类型都可以下载
return "application/file";
}
public InputStream getInputStream() throws IOException {
//设置下载的路径信息
return new FileInputStream(path);
}
};
}
}
//==============================================================================================================================================
/*struts2 的上传和下载*/
/*struts2 的上传*/
//index.jsp文件中
<form action="upload.action" method = "post" enctype = "multipart/form-data">
<input type = "file" name = "myfile" /><br/>
<input type = "submit" value = "上传" />
</form>
<s:actionerror/> <!--添加action级别的错误信息,默认上传容量是2M,超过则接收错误信息-->
//struts.xml文件中
<package name = "etoak" extends = "struts-default">
<action name = "upload" class = "com.etoak.action.UploadAction">
<result>/upload_ok.jsp</result>
<!--默认上传大小为2M,超过则不执行action中的execute方法,直接返回错误信息-->
<result name = "input">/index.jsp</result>
</action>
</package>
/UploadAction:
public class UploadAction extends ActionSupport {
///要有这三个属性 myfile对应页面的name值
private File myfile;
private String myfileFileName;
private String myfileContextType;
public File getMyfile() {
return myfile;
}
public void setMyfile(File myfile) {
this.myfile = myfile;
}
public String getMyfileFileName() {
return myfileFileName;
}
public void setMyfileFileName(String myfileFileName) {
this.myfileFileName = myfileFileName;
}
public String getMyfileContextType() {
return myfileContextType;
}
public void setMyfileContextType(String myfileContextType) {
this.myfileContextType = myfileContextType;
}
@Override
public String execute() throws Exception {
/*
* 从封装文件中获取一个输入流
* 在目标路径创建一个新文件,从新文件中获取一个输出流
*/
//设置上传的路径
String path = ServletActionContext.getServletContext().getRealPath("/file");
//使用UUID给上传的文件重新命名
String filename = new UUIDGenerator().generate().toString()+myfileFileName.substring(myfileFileName.indexOf("."));
//创建要上传的文件的File对象
File newFile = new File(path+"/"+filename);
//获取输入流
InputStream is = new FileInputStream(myfile);
//获取输出流
OutputStream os = new FileOutputStream(newFile);
//上传
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b))!=-1){
os.write(b, 0, len);
}
is.close();
os.flush();
os.close();
return SUCCESS;
}
}
//------------------------------------------
/*struts2 的下载*/
/*index.jsp文件中*/
<form action="download.action" method = "post">
请输入要下载的文件名:
<input type = "text" name = "filename" />
<input type = "submit" value = "下载" />
</form>
<pre name="code" class="java">/*<span style="font-family: Arial, Helvetica, sans-serif;">struts.xml文件中*/</span></pre>
<div class="divmar k"></div>
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C++条件分支结构
- USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers
- 数学--数论--HDU--5878 Count Two Three 2016 ACM/ICPC Asia Regional Qingdao Online 1001
- ACM-ICPC 2019 山东省省赛D Game on a Graph
- 数学--数论--HDU6919 Senior PanⅡ【2017多校第九场】
- 数学--数论--Alice and Bob (CodeForces - 346A )推导
- ACM-ICPC 2019 山东省省赛 M Sekiro
- 数学--数论--HDU2136 Largest prime factor 线性筛法变形
- ACM-ICPC 2019 山东省省赛 C Wandering Robot
- 数据库SQL语言从入门到精通--Part 2--MySQL安装
- ACM-ICPC 2019 山东省省赛 A Calandar
- POJ 1845-Sumdiv(厉害了这个题)
- 数据库SQL语言从入门到精通--Part 1--SQL语言概述
- DP背包(一)
- 程序员最喜欢用的在线代码编译器,什么?你竟然不知道!可以在网页敲代码,运行调试!