Struts2框架11.文件上传与下载
来源:互联网 发布:硕思logo设计软件 编辑:程序博客网 时间:2024/06/06 18:53
在Struts2中也是使用commons-fileupload.jar架包来实现文件上传,只不过Struts2框架给我们封装好了一部分代码,我们只需要要做就是文件保存。在Strur2框架中是使用fileUpload拦截器实现的,此拦截器在defaultStack拦截器栈中有引用。当然上传文件可以是单个文件上传也可以是多个文件上传,多个文件是将Action的属性声明成数组。
下面我们创建一个.jsp文件
1.上面代码中为了简洁,我删掉了属性的set和get方法,大家需要生成。
2.UploadAaction类中的这三个属性可不是随便定义的,是要遵循规定。
属性详解
uploadFile属性:要与jsp页面中文件域的name属性相同。作用是用于封装File控件对应文件的内容,简单的说就是封装你选择的文件。
uploadFileFileName属性:该属性名是由File类型属性名和FileName组成。作用是封装File控件对应的属性名。
uploadFileContentType属性:该属性名是由File类型属性名和ContentType组成。作用是封装File控件对应的文件类型。
也就是说除了File类型的属性外,其它两种属性名都是固定写法。再举例说明一下:
我们将jsp页面的File空间的name属性设置为xxx,<input type="file" name="xxx"/>,那么我们的Action类中的属性要写成如下
File xxx;String xxxFileName; String xxxContentType;
做好上面的准备之后我们就需要在upload()方法中写代码,实现文件保存。
注意:上面用到了一个String类型的savePath属性,这个属性的值是上传的文件保存在服务器的那个目录中。例如我要将上传的文件保存在\page\uploadFile\upload路基下,那么你的savePath="\\page\\uploadFile\\upload";这种方法是在程序中写死的,如果你想换路径那么就要修改程序源码然后在重新编译程序。我使用的方法是在struts.xml文件中配置,这样当我要修改的时候,就可以修改struts.xml文件就行了。
下面介绍几个属性
struts.multipart.saveDir:临时文件目录
配置上传文件大小
<constant name="struts.multipart.maxSize" value=""/>
<interceptor-ref name="fileUpload">
<param name="maximumSize"></param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
注意:struts.multipart.maxSize属性的值必须大于或等于maximumSize的值
================== 文件下载 ==================
这里主要实现收费下载这个功能
DownloadAction类中声明两个属性
private InputStream inputStream;
private String res="/source/test.doc";
下面我们创建一个.jsp文件
<form action="./uploadUploadAction" method="post" enctype="multipart/form-data"> 选择文件<input type="file" name="uploadFile"/> <input type="submit" value="提交"></form>
注:文件上传method属性必须为post,enctype属性为multipart/form-data。
<input/>元素的type属性为file,表明是文件域。
下面我们创建一个UploadAction类
public class UploadAction extends ActionSupport { private File uploadFile; private String uploadFileFileName; private String uploadFileContentType; //文件上传 public String upload(){ return Action.SUCCESS; }}注意:
1.上面代码中为了简洁,我删掉了属性的set和get方法,大家需要生成。
2.UploadAaction类中的这三个属性可不是随便定义的,是要遵循规定。
属性详解
uploadFile属性:要与jsp页面中文件域的name属性相同。作用是用于封装File控件对应文件的内容,简单的说就是封装你选择的文件。
uploadFileFileName属性:该属性名是由File类型属性名和FileName组成。作用是封装File控件对应的属性名。
uploadFileContentType属性:该属性名是由File类型属性名和ContentType组成。作用是封装File控件对应的文件类型。
也就是说除了File类型的属性外,其它两种属性名都是固定写法。再举例说明一下:
我们将jsp页面的File空间的name属性设置为xxx,<input type="file" name="xxx"/>,那么我们的Action类中的属性要写成如下
File xxx;String xxxFileName; String xxxContentType;
做好上面的准备之后我们就需要在upload()方法中写代码,实现文件保存。
public String upload(){ FileInputStream fis = null; //文件输入流 FileOutputStream fos = null;//文件输出流 ServletContext context = ServletActionContext.getServletContext(); try { //将要上传的File对象放入,文件输入流,方便从文件输入流读取字节,写到硬盘 fis = new FileInputStream(uploadFile); //使用文件输出流写到硬盘时要注意,文件路径必须是物理路径如"c:\test\xxx.xx",也就是说必须有盘符和文件名 //getRealPath()方法是将虚拟路径转换成真实路径,加上文件名,拼接成真实的物理路径就可以使用这个路径写出文件了。 String realPath = context.getRealPath(savePath) + "\\" + uploadFileFileName; //将真实物理地址放到FileOutputStream的构造函数中创建文件输出流对象 fos = new FileOutputStream(realPath); int date; <span style="font-family: SimSun;">//这里就是每次循环读取一个字节,这个date中存储的就是你读取的字节,读到文件最后会返回-1</span><pre name="code" class="java" style="font-size: 14px;"> <span style="font-family: SimSun;">//这里也可以将read方法中传入一个</span><span style="font-family: SimSun;">byte</span><span style="font-family: SimSun;">类型数组</span><span style="font-family: SimSun;">byte[] bytes = new byte[1024]</span><span style="font-family: SimSun;">,1024是大小</span><span style="font-family: SimSun;"></span><pre name="code" class="java" style="font-size: 14px;"> <span style="font-family: SimSun;">//这个时候date存入的不是读取的字节,而是你读入的字节大小,例如读到文件最后,只读了300字节那么date就为300.</span><pre name="code" class="java" style="font-size: 14px;"> <span style="font-family: SimSun;">//使用指定字节来读取数据就需要使用fos.write(bytes, 0, date);</span>while ((date = fis.read()) != -1){ fos.write(date); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { fis.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } return Action.SUCCESS;} 这里也可以使用
注意:上面用到了一个String类型的savePath属性,这个属性的值是上传的文件保存在服务器的那个目录中。例如我要将上传的文件保存在\page\uploadFile\upload路基下,那么你的savePath="\\page\\uploadFile\\upload";这种方法是在程序中写死的,如果你想换路径那么就要修改程序源码然后在重新编译程序。我使用的方法是在struts.xml文件中配置,这样当我要修改的时候,就可以修改struts.xml文件就行了。
<param name="svsePath">/page/uploadFile/upload</param>只需要在你的action元素中配置以上代码就可以实现,其中name属性为你Action类中的变量名,元素中间的数据为要保存到的路径。这种方法也可以做一些初始化工作,例如初始值。
下面介绍几个属性
struts.multipart.saveDir:临时文件目录
配置上传文件大小
<constant name="struts.multipart.maxSize" value=""/>
<interceptor-ref name="fileUpload">
<param name="maximumSize"></param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
注意:struts.multipart.maxSize属性的值必须大于或等于maximumSize的值
================== 文件下载 ==================
这里主要实现收费下载这个功能
<action name="DownloadAction" class="com.house.action.DownloadAction" method="download"><result name="success" type="stream"><param name="contentType">application/msword</param><param name="inputStream">inputStream</param>/download_success.jsp</result></action>配置action
DownloadAction类中声明两个属性
private InputStream inputStream;
private String res="/source/test.doc";
public InputStream getInputStream() throws FileNotFoundException {ServletContext context=ServletActionContext.getServletContext();InputStream inputStream=new FileInputStream(context.getRealPath(res));return inputStream;}将生成的get方法写成这个样子就行了
0 0
- Struts2框架11.文件上传与下载
- 使用Struts2框架进行文件的上传与下载
- 框架(一)struts2——文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2 文件上传与下载
- struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2-文件上传与下载
- struts2文件上传与下载
- Struts2文件上传与下载
- struts2文件上传与下载
- struts2文件上传与下载
- Struts2上传与下载文件
- 【codeforces 658A Bear and Reverse Radewoosh】
- android 自定义ImageView实现圆形压缩图片
- CodeForces 660ACo-prime Array
- 再谈Jquery Ajax方法传递到action
- cuteftp访问FTP服务,vsftpd: refusing to run with writable root inside chroot()问题解决方法,超简练,附(ftp服务目录为SD卡方案)
- Struts2框架11.文件上传与下载
- 226. Invert Binary Tree
- Codeforces Round #368 (Div. 2)- A. Brain's Photos
- 关于AsyncTask的一点愚见
- Dima and Guards
- UVA-297 Quadtrees
- HDU 5755 Gambler Bo
- 【codeforces 653 A Bear and Three Balls】
- Android开发的一些知识点(随时更新)