1.文件上传
//FileUpLoadAction .java
public class FileUpLoadAction {
private File image; //取得文件
private String imageFileName; //取得文件名
private String imageContentType; //取得文件类型
private File[] images; //取得多个文件
private String[] imagesFileName; //取得多个文件名
private String[] imagesContentType; //取得多个文件类型
public String executeSimple() throws Exception{ //上传单个文件
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
System.out.println(realpath);
if(image!=null){
File savefile = new File(new File(realpath), imageFileName);
if(!savefile.getParentFile().exists()) savefile.getParentFile().mkdirs();
FileUtils.copyFile(image, savefile);
ActionContext.getContext().put("message", "上传成功");
}
return "success";
}
public String executeMutiple() throws Exception{ //上传多个文件
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
System.out.println(realpath);
if(image!=null){
File savedir = new File(realpath);
if(!savedir.exists()){
savedir.mkdirs();
}
for(int i = 0 ; i<image.length ; i++){
File savefile = new File(savedir, imageFileName[i]);
FileUtils.copyFile(image[i], savefile);
}
ActionContext.getContext().put("message", "上传成功");
}
return "success";
}
.....//getters and setters
}
//上传单个文件表单
<form action="upload_executeSimple" enctype="multipart/form-data" method="post">
文件:<input type="file" name="image"><br/>
<input type="submit" value="上传"/>
</form>
//上传多个文件表单, 注意enctype="multipart/form-data"
<form action="upload_executeMutiple" enctype="multipart/form-data" method="post">
文件1:<input type="file" name="images"><br/>
文件2:<input type="file" name="images"><br/>
文件3:<input type="file" name="images"><br/>
<input type="submit" value="上传"/>
</form>
//struts.xml
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<constant name="struts.multipart.maxSize" value="10701096"/>
<package name="upload" namespace="/" extends="struts-default">
<action name="upload_*" class="FileUpLoadAction" method="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</action>
</package>
</struts>
2. 文件下载
public class DownloadAction extends ActionSupport {
private String fileName;
public void setFileName() {
String tempFileName = ServletActionContext.getRequest().getParameter("name");
try {
// 对tempFileName进行UTF-8解码
// 这里使用request.setCharacterEncoding解码无效.
// 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件
tempFileName = new String(tempFileName .getBytes("ISO-8859-1"), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
this.fileName = tempFileName ;
}
//此方法对应的是struts.xml文件中的:
// <param name="contentDisposition">attachment;filename="${fileName}"</param>
// 这个属性设置的是下载工具下载文件时显示的文件名,
// 要想正确的显示中文文件名,我们需要对fileName再次编码
//否则中文名文件将出现乱码,或无法下载的情况
public String getFileName() throws UnsupportedEncodingException {
fileName=new String(fileName.getBytes(),"ISO-8859-1");
return fileName;
}
//此方法对应的是struts.xml文件中的:
// <param name="inputName">downloadFile</param>
//返回下载文件的流,可以参看struts2的源码
public InputStream getDownloadFile() {
this.setFileName();
return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
}
public String execute() throws Exception {
return SUCCESS;
}
}
struts.xml 其中的EL表达式,是要注意的
<action name="download" class="com.test.action.DownloadAction">
<result name="success" type="stream">
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="inputName">downloadFile</param>
<!--对应DownloadAction.getDownloadFile()-->
</result>
</action>
分享到:
相关推荐
在本教程中,您可以学习 迭代请求文件 和 上传多个文件 一次使用 Django 在 Python 中。本教程旨在为学生和初学者提供学习开发动态网站的参考 姜戈.在这里,我将提供一些步骤来创建一个简单的 Web 应用程序,该应用...
ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)
博文链接:https://tj007-bo.iteye.com/blog/128181
修正327补丁导致doc文件不能上传的BUG 3: 修正UBB编辑器模式下发布的相册不能以相册模式显示的BUG 4: 整站加密后相片不在整站中显示 5: 修正日志不允许回复时仍能被恶意回复的BUG 6: 修正摘要中的图片的绝对路径...
Android 多线程可断点续传上传文件至服务器Demo(Android端编辑器:Android Studio,服务器端编辑器:Eclipse,请注意手机默认下载目录必须要有t007.zip,服务器端必须有D:\temp\temp目录)
获取图片方向js、解决IOS 拍照时图片旋转问题,图片压缩问题、uni-app 上传图片功能,具体用法可参考博客内容
2.上传文件时,注意区分它的类别(大图,小图.网站LOGO),小图的长宽建议为:150X113PX 大图的宽度最好不要超边700,不然就会将网页撑大,网站的LOGO长宽为:778X154PX。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\...
C#语言开发,.net,基于fo-dicom的医学影像接收和发送服务程序,可对接pacs。遵循Dicom3.0医学影像标准通信协议 适用于:从事医学影像软件开发的工作人员
gamit是MIT开发的一款用于解算长基线的GPS基线解算软件,在该领域有着其特有的魅力! 这是一个分卷压缩包,需要8个压缩文件一起才能解压,这是因为CSDN的最大文件上传限制,请大家谅解!
项目不是BaGet的源码,是利用BaGet把Dll文件上传到内部网络,提供给其他同事小伙伴共享下载访问dll文件的示例项目 文件目录 1.BaGetDemo -- 主示例文件 2.Dll -- 项目打包生成的 .nupkg 包文件 3.BaGetDemo.sln -- ...
文件上传与下载模块 适合研究和开发设计 jsp 源码
创建APP项目,资源较大,陆续上传中... 001-移动商城项目介绍和效果演示.avi 002-开启开发者选项和打开usb调试.avi 003-移动商城开发需要安装哪些工具.avi 004-如何把教程配套的代码运行起来.avi 005-创建项目.avi ...
台达触摸屏编程软件DOPSoft 2.00.07 版本
以前上传的这一节课由于文件大,上传文件大小限制,只能分享链接,现在补发。 cadence视频教程(第007讲) 于博士的 cadence视频教程 很详细。适合初学者,容易上手。 第007讲 主要讲解内容: 第7讲 总线的使用方法 ...
微信小程序录音文件.silk上传服务器并且转换mp3格式。本教程将采用nodejs/silk_v3_decoder.exe/ffmpeg三个东西配合使用。本教程是在windows下通过。 本教程包括下面几个步骤: 1、nodejs安装等一些基本使用就不说了...
视频较大,陆续上传中。 001-移动商城项目介绍和效果演示.avi 002-开启开发者选项和打开usb调试.avi 003-移动商城开发需要安装哪些工具.avi 004-如何把教程配套的代码运行起来.avi 005-创建项目.avi 006-快速开发第...
上传权限不够,只能分4部分上传 一. IntraWeb 9.0.42的破解 1. 安装前先移除/卸载老版IntraWeb:把文件夹“delin”中的delin.bat放到delphi7或delphi2007的lib目录下运行一次。 2. 安装Intraweb时,License ...
上传权限不够,只能分4部分上传 一. IntraWeb 9.0.42的破解 1. 安装前先移除/卸载老版IntraWeb:把文件夹“delin”中的delin.bat放到delphi7或delphi2007的lib目录下运行一次。 2. 安装Intraweb时,License ...