Struts2 文件上传与下载
2017-07-08 17:48
330 查看
1.文件上传
1.1必要条件:(1)表单的method必须是post
(2)表单enctype必须是mulipart/form-data
(3)提供input type=“file”类型上传输入域,在 struts2中文件上传是由 fileUpload 拦截器完成的
2.1单文件上传
Action: public class singleUploadAction extends ActionSupport { private String name; private File photo;//文件名必须是file类型,名字对应着表单的上传输入域 private String photoFileName;//固定写法:xxxFileName,文件名字 private String photoContentType; //固定写法,上传文件的MIME 类型 public String upload() throws IOException { System.out.println(name); System.out.println(photoContentType); ServletContext servletContext = ServletActionContext.getServletContext(); //存到这里面 String diectory =servletContext.getRealPath("/file"); // servletContext.getClassLoader().getResourceAsStream(); //得到流 //构建目标文件,需要两个参数 //文件目录,文件的名字 ,把photo写进target File target = new File(diectory,photoFileName); //写入文件 //复制 FileUtils.copyFile(photo,target); return SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; } 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: <package name="singleUpload" extends="struts-default"> <action name="upload" class="singleUploadAction的路径" method="upload"> <!--显示文件后缀--> <interceptor-ref name="defaultStack"> <param name="fileUpload.allowedExtensions">.jpg,.png,</param> </interceptor-ref> <result name="success">success.jsp</result> <result name="input">singleFileUpload.jsp</result> </action> </package> jsp: <%--文件上传--%> <s:actionerror/> <s:fielderror/> //显示错误信息 <form action="${pageContext.request.contextPath}/upload.action" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name"> 图片:<input type="file" name="photo"> <input type="submit" value="上传"> </form> //最后输出的文件在out里面
2.2多文件上传:
Action: public class UploadAction extends ActionSupport { private String username; private List<File> file1; private List<String> file1FileName; private List<String> file1ContentType; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public List<File> getFile1() { return file1; } public void setFile1(List<File> file1) { this.file1 = file1; } public List<String> getFile1FileName() { return file1FileName; } public void setFile1FileName(List<String> file1FileName) { this.file1FileName = file1FileName; } public List<String> getFile1ContentType() { return file1ContentType; } public void setFile1ContentType(List<String> file1ContentType) { this.file1ContentType = file1ContentType; } public String upload() throws IOException { ServletContext servletContext = ServletActionContext.getServletContext(); String path = servletContext.getRealPath("/file"); //构建目标文件,需要两个参数 //文件目录,文件的名字 ,把photo写进target for (int i = 0; i < file1.size(); i++) { File file=new File(path,file1FileName.get(i)); FileUtils.copyFile(file1.get(i),file); } return SUCCESS; } } xml: <package name="upload2" extends="struts-default"> <action name="upload2" class="UploadAction的路径" method="upload"> <result name="success">success.jsp</result> <result name="input">Upload.jsp</result> </action> </package> jsp: <form action="${pageContext.request.contextPath}/upload2.action" enctype="multipart/form-data" method="post"> 用户名:<input type="text" name="username"><br> 上传文件:<input type="file" name="file1"><br> 上传文件:<input type="file" name="file1"><br> <input type="submit" value="提交"> </form>
2.3 文件下载
2.3.1书写规范:
inputStream / fileName
struts.xml中action result的type=“stream”两个参数:
inputName[输入流的属性名]
contentDisposition=attachment;filename=${fileName}[通知浏览器以下载形式打开]
Action: public class DownloadAction extends ActionSupport { //定义一个输入流,把你要下载的东西给这个inputstream,名字随意,in 不行 public InputStream inputStream; private String fileName; public String download() throws IOException { //实现下载,就是给inputstream String realPath = ServletActionContext.getServletContext().getRealPath("/五百年.jpg"); //获得文件file,来获得名字 fileName= FilenameUtils.getName(realPath); fileName=filenameEncoding(FilenameUtils.getName(realPath),ServletActionContext.getRequest(),ServletActionContext.getResponse()); inputStream=new FileInputStream(realPath); return SUCCESS; } 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 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; } } xml: <package name="download" extends="struts-default"> <action name="download" class="DownloadAction动作类的路径" method="download"> <result name="success" type="stream"> <!--指定动作类中输入流,属性名--> <param name="inputName">inputStream</param> <!--通知浏览器以下载IDE形式打开--> <param name="contentDisposition">attachment;filename=${fileName}</param> <!--ognl表达式来获取值--> </result> </action> </package> jsp: <a href="${pageContext.request.contextPath}/download.action"> 下载</a>
相关文章推荐
- struts2学习笔记(11)——struts2文件上传与下载
- struts2文件上传下载
- struts2 文件上传和下载,以及部分源码解析
- Struts2 多文件上传下载
- Struts2之实现文件上传与下载
- Struts2学习笔记16:Struts2的文件上传和下载【续】三
- Struts2文件的上传和下载
- Struts2文件的上传和下载
- Struts2文件上传和下载
- Struts2文件的上传和下载
- Struts2文件的上传和下载
- struts2文件的上传和下载功能
- Struts2 多个文件上传和下载(支持中文文件名)
- 【原创】Struts2学习笔记之文件的上传与下载
- Struts2学习笔记13:Struts2的文件上传和下载
- Struts2文件上传与下载
- Struts2学习笔记14:Struts2的文件上传和下载【续】
- [转载] 第六章 struts2文件上传与下载
- Struts2文件上传与下载
- struts2 文件上传与下载原理