您的位置:首页 > 编程语言 > Java开发

struts2-上传下载文件

2018-04-02 22:11 288 查看
struts2的文件上传下载很简单,因为有拦截器的帮助,可以省略大部分代码,只需要通过写入路径就可实现。

上传文件

1、表单的文件上传中,method必须为post,还要加个enctype=”multipart/form-data”

<form action="test/upload" method="post" enctype="multipart/form-data">
img:<input type="file" name="img">
img:<input type="file" name="img">
<input type="submit" value="upload">
</form>


2、uploadAction.java

public class uploadAction {
private File[] img;
private String[] imgFileName;//文件名,必须这样命名,否则无法识别

public File[] getImg() {
return img;
}

public void setImg(File[] img) {
this.img = img;
}

public String[] getImgFileName() {
return imgFileName;
}

public void setImgFileName(String[] imgFileName) {
this.imgFileName = imgFileName;
}

public String execute(){
if(img!=null){//防止img为空时直接在浏览器抛出异常
for(int i = 0;i<img.length;i++){
try {
//                String path = "f:/images";
String path = ServletActionContext.getServletContext().getRealPath("/images");//获取服务器下应用根目录
File destFile = new File(path  ,imgFileName[i]);
System.out.println(path);
FileUtils.copyFile(img[i], destFile );//向目路径写入文件

} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
return "fail";
}
}


3、注册action

<action name="upload" class="com.test3.uploadAction">
<result>/welcome.jsp</result>
<result name="fail">/fail.jsp</result>
</action>


修改上传文件最大值:

默认常量为struts.multipart.maxSize,修改值:(一次上传的所以文件总共的大小)

<constant name="struts.multipart.maxSize" value="20971520" /><!--20M-->


限制上传文件扩展名

action下添加:

<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedExtensions">jpg,img</param>
</interceptor-ref>


文件下载

1、 下载请求:

<a href="test/download">image</a>


2、download.java

public class download {

private InputStream is;//文件输入流,用于指定服务器向客户端所提供下载的文件资源
private String fileName;

public InputStream getIs() {
return is;
}

public void setIs(InputStream is) {
this.is = is;
}

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

public String execute(){
fileName = "2.ico";
is = ServletActionContext.getServletContext().getResourceAsStream("/images/"+fileName);//从应用根目录读取文件
//取出后修改成自定义的名字,多从数据库读取
fileName = "image.ico";

return "success";
}
}


3、注册action:

<action name="download" class="com.test3.download">
<result type="stream">
<param name="contentDisposition">attachment;fileName=${fileName}</param>
<param name="inputName">is</param><!-- inputName可省略,其后面的默认值为inputname-->
</result>
</action>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: