Struts2系列之文件上传下载
来源:互联网 发布:西安建筑科技大学网络 编辑:程序博客网 时间:2024/06/05 06:15
文件上传的必要条件
1. 表单的method 必须是post
2. 表单提供enctype必须是mulipart/from-data
3.提供input type=”file”类型上传输入域
注意:如果是大文件浏览器也会拦截不让上传
在struts2中文件上传是由fileUpload拦截器完成的
单文件上传:
jsp:
<head> <title>单文件上传</title></head><body><%--文件上传必要的条件--%><%--1, 要有一个表单 方式要是post请求--%><%--2, enctype="multipart/form-data--%><%--3, <input type="file" name="photo">--%><s:fielderror/><s:actionerror/><form action="${pageContext.request.contextPath}/upload.action" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="username"> 头像:<input type="file" name="photo"> <input type="submit" value="上传"></form>
action:
public class SingleUploadAction extends ActionSupport { private String username; private File photo;//必须是file类型,名字对应着表单的上传输入域 private String photoFileName;//固定的写法:XXXFileName private String photoContentType;//上传文件的MIME类型,固定写法 public String upload() throws IOException { System.out.println(username + "fkdsjf"); System.out.println(photoContentType); ServletContext servletContext = ServletActionContext.getServletContext(); //获得存放文件的真是目录 String directory = servletContext.getRealPath("/file"); //构建目标文件 File target = new File(directory,photoFileName); //写入目标文件 FileUtils.copyFile(photo, target); return SUCCESS; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public File getPhoto() { return photo; } public void setPhoto(File photo) { this.photo = photo; } public String getPhotoFileName() { return photoFileName; } public void setPhotoFileName(String photoFileName) { this.photoFileName = photoFileName; } public String getPhotoContentType() { return photoContentType; } public void setPhotoContentType(String photoContentType) { this.photoContentType = photoContentType; }}
struts.xml
<!--修改文件的大小 (10M 1024*1024*10)--> <constant name="struts.multipart.maxSize" value="10485760"/> <!--由于我们在不被允许的格式中要显示用户可以看得懂的文字 可以写一个配置文件 constant name="国际化的一种方式"--> <constant name="struts.custom.i18n.resources" value="fileUploadMessage"/> <package name="p1" extends="struts-default"> <action name="upload" class="com.wangyjie.struts.fileupload.SingleUploadAction" method="upload"> <!--因为在默认的拦截器中 直接引用就可以了--> <interceptor-ref name="defaultStack"> <!--限制文件后缀--> <param name="fileUpload.allowedExtensions">.jsp, png</param> </interceptor-ref> <result name="success">/success.jsp</result> <result name="input">/singleFileUpload.jsp</result> </action> </package>
文件下载
结果集类型的使用 stream
• 动作类的书写规范 : inputStream / fileName
•struts.xml中action result的type=“stream”两个参数:
◦ inputName[输入流的属性名]
◦ contentDisposition=attachment;filename=${fileName}[通知浏览器以下载形式打开]
action:
package com.wangyjie.struts.down;import com.opensymphony.xwork2.ActionSupport;import org.apache.commons.io.FileUtils;import org.apache.commons.io.FilenameUtils;import org.apache.struts2.ServletActionContext;import sun.misc.BASE64Encoder;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.URLEncoder;/** * Created by dllo on 17/7/7. */public class downLoadAction extends ActionSupport { //定义一个输入流 private InputStream inputStream; private String imageFileName; public String getImageFileName() { return imageFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } public InputStream getInputStream() { return inputStream; } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } public String download() throws IOException { //实现下载.给inputStream赋值 String realPath = ServletActionContext.getServletContext().getRealPath("/杰哥.jpg"); //获取文件名// imageFileName = FilenameUtils.getName(realPath); imageFileName = filenameEncoding(FilenameUtils.getName(realPath), ServletActionContext.getRequest(),ServletActionContext.getResponse()); inputStream = new FileInputStream(realPath);// FileUtils.getFile(realPath).getName(); return SUCCESS; }//中文处理 public String filenameEncoding(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException { String agent = request.getHeader("User-Agent"); //获取浏览器的类型 System.out.println(agent); if (agent.contains("Firefox")) { BASE64Encoder base64Encoder = new BASE64Encoder(); filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else if(agent.contains("MSIE")) { filename = URLEncoder.encode(filename, "utf-8"); } else if (agent.contains("Safari")){ filename = new String(filename.getBytes("UTF-8"),"ISO8859-1"); }else { filename = URLEncoder.encode(filename, "utf-8"); } return filename; }}
struts.xml
<package name="downLoad" extends="struts-default"> <action name="download" class="com.wangyjie.struts.down.downLoadAction" method="download"> <result name="success" type="stream"> <!--指定动作类中的输入流,属性名--> <param name="inputName">inputStream</param> <!--通知浏览器以下载的形式打开--> <!--文件名动态处理 添加 fileName 属性--> <param name="contentDisposition">attachment;filename=${imageFileName}</param> </result> </action> </package>
阅读全文
0 0
- Struts2系列之文件上传下载
- Struts2文件上传下载
- Struts2 多文件上传下载
- struts2文件上传下载
- struts2文件上传下载详解
- struts2 文件上传下载
- Struts2文件上传下载(一)
- Struts2文件上传下载(二)
- Struts2 上传下载文件
- struts2上传下载文件
- Struts2文件上传下载
- struts2文件上传下载
- struts2文件上传下载
- struts2的文件上传下载
- struts2实现文件上传下载
- 文件上传下载struts2
- Struts2文件上传下载
- struts2文件上传下载
- 初识Nginx--Linux下的基础命令
- Struts2 输入验证与自定义拦截器
- 南京邮电大学2013年硕士研究生招生复试及同等学力加试参考书目
- Qt提升对SQLite数据库的读写速度
- 高通LCD kernel层代码跟踪分析
- Struts2系列之文件上传下载
- 循环json数据
- PHP代码运行流程
- 微信小程序开发体验(热身篇)
- appium官网中文资料
- 2.韦东山嵌入式学习内存
- 套接字编程原理及例程
- 被解放的姜戈01 初试天涯
- 接口设计