文件上传与下载
来源:互联网 发布:管道保温计算软件 编辑:程序博客网 时间:2024/06/10 15:02
一)、文件上传(多文件,单文件)
(1)、上传单个文件:
jsp页面:
<form action = "login.action" method = "post" enctype = "multipart/form-data"> 账号:<input name = "name" type = "text"><br><br> 照片:<input name = "photo" type = "file"><br><br> <input type ="submit" value = "提交">
Action代码:
package com.action;import java.io.File;import java.io.IOException;import org.apache.commons.io.FileUtils;public class LoginAction { private String name ; private File photo; private String photoFileName; private String photoContentType; public String execute(){ System.out.println(photoFileName); System.out.println(photoContentType); File destFile = new File("C:\\Users\\Administrator\\Pictures\\struts\\"+photoFileName); try {FileUtils.copyFile(photo, destFile);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} return "success"; }到此为止简单的文件上传已经完成,但是,通常情况下文件不是保存在某个指定的盘下,而是保存在项目文件下,修改 如下:
File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload/"+photoFileName));
(2)、上传多个文件:只需要将上例中的与文件相关的属性改成数组形式即可,然后将上传的方法,改为操作数组。
jsp代码:
<form action = "login.action" method = "post" enctype = "multipart/form-data"> 账号:<input name = "name" type = "text"><br><br> 照片:<input name = "photo" type = "file"><br><br> 照片:<input name = "photo" type = "file"><br><br> <input type ="submit" value = "提交"> </form>
Action代码:
import org.apache.struts2.ServletActionContext;public class LoginAction { private String name ; private File[] photo; private String[] photoFileName; private String[] photoContentType; public String execute(){// System.out.println(photoFileName);// System.out.println(photoContentType);// File destFile = new File("C:\\Users\\Administrator\\Pictures\\struts\\"+photoFileName); for (int i = 0; i < photo.length; i++) { try { File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload/"+photoFileName[i])); FileUtils.copyFile(photo[i], destFile); } catch (IOException e) { System.out.println("execute exception"); }} return "success"; }
(3)、限制文件名、类型、大小:
(1)、限制文件名:
String filename = ServletActionContext.getServletContext().getRealPath("/upload/" +UUID.randomUUID().toString() +photoFileName.substring(photoFileName.lastIndexOf("."))); File destFile = new File(filename); FileUtils.copyFile(photo, destFile);
(2)、限制文件类型:(Action必须继承ActionSupport类!!!)
struts.xml文件配置:
<package name = "default" namespace = "/" extends = "struts-default"> <action name = "login" class = "com.action.LoginAction"> <result name = "success">/ok.jsp</result> <result name = "input">/index.jsp</result> <interceptor-ref name="fileUpload"> <param name="allowedTypes"> image/png,image/gif,image/jpeg,image/jpg </param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </action> </package>
自定义消息配置文件:massage.properties
struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u6587\u6863\u7C7B\u578B\u4E0D\u6B63\u786E {1}还需要在struts.xml中进行常量配置:
<constant name="struts.custom.i18n.resources" value="massage"></constant>
(3)限制文件大小:
自定义消息配置:
struts.messages.error.file.too.large=\u60A8\u4E0A\u4F20\u7684\u6587\u4EF6{1} \u8D85\u8FC7\u6700\u5927\u9650\u5236struts.xml中添加:(大小自己定义)
<param name="maximumSize"> 1048576 </param>
(二)、文件下载:
准备jsp页面
<a href = "download.action">下载</a>
准备Aciton代码:
package com.action;import java.io.InputStream;import org.apache.struts2.ServletActionContext;public class DownLoadAction { private String filename; private InputStream input; public String execute (){ filename = "1.png"; input = ServletActionContext.getServletContext().getResourceAsStream("/upload/"+filename); return "success"; }
读取服务器端指定的文件,将此文件以输出流的方式响应给客户端。
Action的默认返回类型是“转发”,必须改成”流“的形式向客户端输出。
struts.xml文件配置:
<action name = "download" class = "com.action.DownLoadAction"> <result name = "success" type = "stream"> <param name="inputName">input</param> <param name = "contentDisposition" >attachment;filename=${filename}</param> </result> </action>
文件名中午乱码问题
修改Action中的代码为:
public String execute () throws Exception{ filename = "呵呵.png"; input = ServletActionContext.getServletContext().getResourceAsStream("/upload/"+filename); filename = URLEncoder.encode(filename,"utf-8"); return "success"; }
阅读全文
0 0
- 文件上传与下载----上传
- 文件上传与下载
- 文件上传与下载
- 上传与下载文件
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件上传与下载
- 文件下载与上传
- 文件上传与下载
- 文件上传与下载
- linux卸载openjdk以及安装正常版本jdk
- 浙大PAT甲级-1008
- Machine Learning----Regression(2)
- haproxy.cfg配置详解
- Android中的事件分发(上)
- 文件上传与下载
- 关于解决工程编译出现Undefined symbol __use_two_region_memory 和Undefined symbol __initial_sp的问题
- Spring初始化
- CRC循环冗余码
- 【Linux】进程间的关系以及终端的概念
- 人生不是只有努力就够了
- LK概览
- redis哨兵模式使用lua脚本实现分布式锁
- 使用sql生成UUID