近来用Struts2做上传下载,由于是初学,边学边用,除了不少问题,现总结一下:
1、上传的Action需定义三个变量,分别是File类的变量名,对应页面上file标签的name属性,两个String类型,分别用File的变量名+FileName和File的变量名+FileName+ContextType,如File uploadFile,则要定义String uploadFileFileName和String uploadFileContextType,并有对应的getter和setter方法,这样当调用Action时从页面传入要上传的文件,Struts2便会获得文件名并自动获得文件类型,然后用标准IO输入输出流将文件写到服务器上。
2、在form表单中一定要设置属性:method="post" enctype="multipart/form-data",否则无法获得文件。
3、下载的Action中要定义String类型的变量对应文件名,及相应的getter和setter方法,以及返回类型为InputStream的get方法,该方法名为get+InputSream的名字,该名字在sturts.xml中的Action中result标签中的param子标签配置,如
<param name="inputName">downloadFile</param>,则Action中要有InputStream getDownloadFile()方法,另外还要配置
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>指下载文件的类型属性,
<param name="contentDisposition">attachment;filename="${downloadChineseFileName}"</param>指下载文件的中文名字,downloadChineseFileName是Action中编码后的名字,还有<param name="inputPath">/UploadFiles/</param>是文件的相对路径,在项目名根目录下,通过这些配置,就能在文件存在的前提下下载文件到本地了。
4、在开发过程中,出现不同页面调用同一Action却只有第一个页面可以,后面的出现无法找到匹配的Action的错误(There is no Action mapped for action name XXX),多次改name和path都不成功,后来受启发将action路径改为项目的绝对路径,如在原action的路径前加上新建JSP页面自动生成的bashPath,成功调用并执行
1、上传的Action需定义三个变量,分别是File类的变量名,对应页面上file标签的name属性,两个String类型,分别用File的变量名+FileName和File的变量名+FileName+ContextType,如File uploadFile,则要定义String uploadFileFileName和String uploadFileContextType,并有对应的getter和setter方法,这样当调用Action时从页面传入要上传的文件,Struts2便会获得文件名并自动获得文件类型,然后用标准IO输入输出流将文件写到服务器上。
2、在form表单中一定要设置属性:method="post" enctype="multipart/form-data",否则无法获得文件。
3、下载的Action中要定义String类型的变量对应文件名,及相应的getter和setter方法,以及返回类型为InputStream的get方法,该方法名为get+InputSream的名字,该名字在sturts.xml中的Action中result标签中的param子标签配置,如
<param name="inputName">downloadFile</param>,则Action中要有InputStream getDownloadFile()方法,另外还要配置
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>指下载文件的类型属性,
<param name="contentDisposition">attachment;filename="${downloadChineseFileName}"</param>指下载文件的中文名字,downloadChineseFileName是Action中编码后的名字,还有<param name="inputPath">/UploadFiles/</param>是文件的相对路径,在项目名根目录下,通过这些配置,就能在文件存在的前提下下载文件到本地了。
4、在开发过程中,出现不同页面调用同一Action却只有第一个页面可以,后面的出现无法找到匹配的Action的错误(There is no Action mapped for action name XXX),多次改name和path都不成功,后来受启发将action路径改为项目的绝对路径,如在原action的路径前加上新建JSP页面自动生成的bashPath,成功调用并执行