文章是参考了一部分,只是打算记下来当个学习的笔记
文件上传早就想学了,一直拖到了现在。
----------------------------------------------------------------------------------------------------
上传准备工作:1.首先是struts2的common-fileupload.jar包的添加
2.jsp页面的form表单红色字体是新添加必须的<s:form action="upload" method="post"enctype="multipart/form-data">
<s:file name="file"></s:file>
<s:submit value="提交"/>
</s:form>
private Filefile; //包含文件内容
private StringfileFileName; //上传文件的名称;
private StringfileContentType; //上传文件的MIME类型;
这些属性都会随着文件的上传自动赋值;
action里面
public String getLoad() throws IOException{
//路径是写死的
//通过file得到他的路径是个临时无意义的路径
File getFile=new File("E:\\"+fileFileName);
FileInputStream fis=new FileInputStream(file);
FileOutputStream fos=new FileOutputStream(getFile);
int t=0;
while((t=fis.read())>-1){
fos.write(t);
}
fis.close();
fos.flush();
fos.close();
return "success";
}
4. 其他xml照旧这样一个简单的上传就完成了。
-----------------------------------------------------------------------------------------------
但是有一些问题例如 上传时的一些验证 文件类型、大小了?
1.可以手动验证 麻烦
2.就是利用拦截器去实现
在引用fileUpload拦截器的时候,可以指定三个参数(指定<param>子元素):
- allowedTypes:指定允许上传的文件的类型,如果存在多种类型,以逗号隔开。注意:这里添的不是文件的扩展名,而是对应的ContentType,如果不知道某种文件的ContentType可以先上传一下试试,在后台输出ContentType来。
- maximumSize:指定允许上传的文件的最大字节数。
- allowedExtensions:指定允许上传的文件的扩展名。
如果上传的文件不满足以上的参数指定的条件,则会跳转到一个叫input的<result>上,一般input都会指回到提交之前的页面,也就是文件上传页面。
在fileUpload拦截器后,需要添加<interceptor-ref name="defaultStack"/>
xml配置例子
<action name="upload" class="com.stx.action.UploadAction" method="getLoad">
<interceptor-ref name="fileUpload">
<param name="allowedExtensions">jpg</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">upload.jsp</result>
<result name="input">upload.jsp</result>
</action>
单个文件上传最大值有默认的限制,如果手动修改可以覆盖掉的
另外就是错误信息的默认提示 在struts2配置的默认核心 信息文件中 可以通过配置文件覆盖掉
------------------------------------------------------------------------------------------------
多文件上传
只需要在提交页面上添加同名的多个文件输入域,然后在Action中对应使用File类型的数组去接收这些参数即可。
<%@taglib prefix="s" uri="/struts-tags" %>
<s:fielderror/>
<form action="/helloworld/uploadAction.action" method="post"
enctype="multipart/form-data">
文件:<input type="file" name="myFile"><br>
文件:<input type="file" name="myFile"><br>
文件:<input type="file" name="myFile"><br>
文件:<input type="file" name="myFile"><br>
<input type="submit" value="提交">
</form>
action
private File[] myFile;
private String[] myFileFileName;
------------------------------------------------------------------------------------------
文件下载
struts2的文件下载给的是个输出流 返回类型stream类型
action例子
public InputStream getInputStream() throws Exception{
return new FileInputStream("E:\\死灵.txt");
}
xml
<action name="download" class="com.stx.action.UploadAction">
<result type="stream">
<param name="contentDisposition">attachment;filename="死灵.txt"</param>
</result>
</action>
其中contentDisposition 参数 例1.内嵌显示一个文件
Content-disposition: inline; filename=foobar.pdf
例2.往response里附加一个文件
Content-disposition: attachment; filename=foobar.pdf
最后
页面用一个超链接就可以了