文件上传struts2 实现文件上传功能(4)

2、多文件上传
修改action

文件上传struts2 实现文件上传功能(4)    private List<File> file;
文件上传struts2 实现文件上传功能(4)    
private List<String> fileFileName;
文件上传struts2 实现文件上传功能(4)    
private List<String> fileContentType;
文件上传struts2 实现文件上传功能(4)    public String execute() throws Exception {
文件上传struts2 实现文件上传功能(4)        
for (int i = 0; i < file.size(); ++i) {
文件上传struts2 实现文件上传功能(4)            InputStream is 
= new FileInputStream(file.get(i));
文件上传struts2 实现文件上传功能(4)            String root 
= ServletActionContext.getRequest().getRealPath(
文件上传struts2 实现文件上传功能(4)                    
"/upload");
文件上传struts2 实现文件上传功能(4)            File destFile 
= new File(root, this.getFileFileName().get(i));
文件上传struts2 实现文件上传功能(4)            OutputStream os 
= new FileOutputStream(destFile);
文件上传struts2 实现文件上传功能(4)            
byte[] buffer = new byte[400];
文件上传struts2 实现文件上传功能(4)
文件上传struts2 实现文件上传功能(4)            
int length = 0;
文件上传struts2 实现文件上传功能(4)
文件上传struts2 实现文件上传功能(4)            
while ((length = is.read(buffer)) > 0{
文件上传struts2 实现文件上传功能(4)                os.write(buffer, 
0, length);
文件上传struts2 实现文件上传功能(4)            }

文件上传struts2 实现文件上传功能(4)            is.close();
文件上传struts2 实现文件上传功能(4)            os.close();
文件上传struts2 实现文件上传功能(4)        }

文件上传struts2 实现文件上传功能(4)        
return SUCCESS;
文件上传struts2 实现文件上传功能(4)    }
修改upload3.jsp
文件上传struts2 实现文件上传功能(4)                <tr>
文件上传struts2 实现文件上传功能(4)                    
<td>
文件上传struts2 实现文件上传功能(4)                        file1
文件上传struts2 实现文件上传功能(4)                    
</td>
文件上传struts2 实现文件上传功能(4)                    
<td>
文件上传struts2 实现文件上传功能(4)                        
<s:file name="file"></s:file>
文件上传struts2 实现文件上传功能(4)                    
</td>
文件上传struts2 实现文件上传功能(4)                
</tr>
文件上传struts2 实现文件上传功能(4)                
<tr>
文件上传struts2 实现文件上传功能(4)                    
<td>
文件上传struts2 实现文件上传功能(4)                        file2
文件上传struts2 实现文件上传功能(4)                    
</td>
文件上传struts2 实现文件上传功能(4)                    
<td>
文件上传struts2 实现文件上传功能(4)                        
<s:file name="file"></s:file>
文件上传struts2 实现文件上传功能(4)                    
</td>
文件上传struts2 实现文件上传功能(4)                
</tr>
文件上传struts2 实现文件上传功能(4)                
<tr>
文件上传struts2 实现文件上传功能(4)                    
<td>
文件上传struts2 实现文件上传功能(4)                        file3
文件上传struts2 实现文件上传功能(4)                    
</td>
文件上传struts2 实现文件上传功能(4)                    
<td>
文件上传struts2 实现文件上传功能(4)                        
<s:file name="file"></s:file>
文件上传struts2 实现文件上传功能(4)                    
</td>
文件上传struts2 实现文件上传功能(4)                
</tr>
结果:
文件上传struts2 实现文件上传功能(4)
文件上传struts2 实现文件上传功能(4)


3、任意数量文件上传 
在多文件上传的基础上修改upload3.jsp
文件上传struts2 实现文件上传功能(4)        <script type="text/javascript">
文件上传struts2 实现文件上传功能(4)        
function addMore()
文件上传struts2 实现文件上传功能(4)        
{
文件上传struts2 实现文件上传功能(4)            
var td = document.getElementById("more");
文件上传struts2 实现文件上传功能(4)            
var br = document.createElement("br");
文件上传struts2 实现文件上传功能(4)            
var input = document.createElement("input");
文件上传struts2 实现文件上传功能(4)            
var button = document.createElement("input");
文件上传struts2 实现文件上传功能(4)            input.type 
= "file";
文件上传struts2 实现文件上传功能(4)            input.name 
= "file";
文件上传struts2 实现文件上传功能(4)            button.type 
= "button";
文件上传struts2 实现文件上传功能(4)            button.value 
= "Remove";
文件上传struts2 实现文件上传功能(4)            button.onclick 
= function()
文件上传struts2 实现文件上传功能(4)            
{
文件上传struts2 实现文件上传功能(4)                td.removeChild(br);
文件上传struts2 实现文件上传功能(4)                td.removeChild(input);
文件上传struts2 实现文件上传功能(4)                td.removeChild(button);
文件上传struts2 实现文件上传功能(4)            }

文件上传struts2 实现文件上传功能(4)            td.appendChild(br);
文件上传struts2 实现文件上传功能(4)            td.appendChild(input);
文件上传struts2 实现文件上传功能(4)            td.appendChild(button);
文件上传struts2 实现文件上传功能(4)        }

文件上传struts2 实现文件上传功能(4)    
</script>
文件上传struts2 实现文件上传功能(4)                <tr>
文件上传struts2 实现文件上传功能(4)                    
<td>
文件上传struts2 实现文件上传功能(4)                        file1
文件上传struts2 实现文件上传功能(4)                    
</td>
文件上传struts2 实现文件上传功能(4)                    
<td id="more">
文件上传struts2 实现文件上传功能(4)                        
<s:file name="file"></s:file>
文件上传struts2 实现文件上传功能(4)                        
<input type="button" value="Add More.." onclick="addMore()">
文件上传struts2 实现文件上传功能(4)                    
</td>
文件上传struts2 实现文件上传功能(4)                
</tr>

结果:
文件上传struts2 实现文件上传功能(4)

(四)文件上传类型、大小的限制
使用struts的拦截器,struts2-core-2.1.6.jar/org.apache.struts2.interceptor.FileUploadInterceptor.class的源码中我们可以看到:
文件上传struts2 实现文件上传功能(4)public class FileUploadInterceptor extends AbstractInterceptor {
文件上传struts2 实现文件上传功能(4)
文件上传struts2 实现文件上传功能(4)    private static final long serialVersionUID = -4764627478894962478L;
文件上传struts2 实现文件上传功能(4)
文件上传struts2 实现文件上传功能(4)    protected static final Logger LOG = LoggerFactory.getLogger(FileUploadInterceptor.class);
文件上传struts2 实现文件上传功能(4)    private static final String DEFAULT_MESSAGE = "no.message.found";
文件上传struts2 实现文件上传功能(4)
文件上传struts2 实现文件上传功能(4)    protected boolean useActionMessageBundle;
文件上传struts2 实现文件上传功能(4)
文件上传struts2 实现文件上传功能(4)    protected Long maximumSize;
文件上传struts2 实现文件上传功能(4)    protected Set
<String> allowedTypesSet = Collections.emptySet();
文件上传struts2 实现文件上传功能(4)    protected Set
<String> allowedExtensionsSet = Collections.emptySet();
所以我们只需的struts.xml中配置它的属性allowedTypesSet即可。在action节点中修改拦截器(默认的拦截器中已经有fileUpload拦截器,我们必须提取出来进行参数设置,然后在加上默认的拦截器)。
文件上传struts2 实现文件上传功能(4)        <action name="upload" class="com.test.action.UploadAction">
文件上传struts2 实现文件上传功能(4)            
<result name="success">/upload/result3.jsp</result>
文件上传struts2 实现文件上传功能(4)            
<result name="input">/upload/upload3.jsp</result>
文件上传struts2 实现文件上传功能(4)            
<interceptor-ref name="fileUpload">
文件上传struts2 实现文件上传功能(4)                
<param name="maximumSize">409600</param>
文件上传struts2 实现文件上传功能(4)                
<param name="allowedTypes">
文件上传struts2 实现文件上传功能(4)                    application/vnd.ms-powerpoint
文件上传struts2 实现文件上传功能(4)                
</param>
文件上传struts2 实现文件上传功能(4)            
</interceptor-ref>
文件上传struts2 实现文件上传功能(4)            
<interceptor-ref name="defaultStack"></interceptor-ref>
文件上传struts2 实现文件上传功能(4)        
</action>
其中<param name="allowedTypes">application/vnd.ms-powerpoint</param>allowedTypes的值可在C:\Tomcat 6.0\conf的web.xml文件中查找。
文件上传struts2 实现文件上传功能(4)
报错信息:
文件上传struts2 实现文件上传功能(4)严重: Content-Type not allowed: file "intrl.txt" "upload__138d8aca_120b73e9cf4__8000_00000002.tmp" text/plain


(五)文件的下载
download.jsp
文件上传struts2 实现文件上传功能(4)        <s:a href="/MyStruts2/download.action">download</s:a>
DownloadAction.java
 1文件上传struts2 实现文件上传功能(4)package com.test.action;
 2文件上传struts2 实现文件上传功能(4)
 3文件上传struts2 实现文件上传功能(4)import java.io.InputStream;
 4文件上传struts2 实现文件上传功能(4)
 5文件上传struts2 实现文件上传功能(4)import org.apache.struts2.ServletActionContext;
 6文件上传struts2 实现文件上传功能(4)
 7文件上传struts2 实现文件上传功能(4)import com.opensymphony.xwork2.ActionSupport;
 8文件上传struts2 实现文件上传功能(4)
 9文件上传struts2 实现文件上传功能(4)public class DownloadAction extends ActionSupport {
10文件上传struts2 实现文件上传功能(4)    public InputStream getDownloadFile() {
11文件上传struts2 实现文件上传功能(4)        return ServletActionContext.getServletContext().getResourceAsStream(
12文件上传struts2 实现文件上传功能(4)                "/upload/intrl.ppt");
13文件上传struts2 实现文件上传功能(4)    }

14文件上传struts2 实现文件上传功能(4)
15文件上传struts2 实现文件上传功能(4)    @Override
16文件上传struts2 实现文件上传功能(4)    public String execute() throws Exception {
17文件上传struts2 实现文件上传功能(4)        return SUCCESS;
18文件上传struts2 实现文件上传功能(4)    }

19文件上传struts2 实现文件上传功能(4)}

20文件上传struts2 实现文件上传功能(4)
web.xml中action配置
文件上传struts2 实现文件上传功能(4)        <action name="download"
文件上传struts2 实现文件上传功能(4)            class
="com.test.action.DownloadAction">
文件上传struts2 实现文件上传功能(4)            
<result name="success" type="stream">
文件上传struts2 实现文件上传功能(4)                
<param name="contentType">
文件上传struts2 实现文件上传功能(4)                    application/vnd.ms-powerpoint
文件上传struts2 实现文件上传功能(4)                
</param>
文件上传struts2 实现文件上传功能(4)                
<param name="contentDisposition">
文件上传struts2 实现文件上传功能(4)                    filename="intrl.ppt"
文件上传struts2 实现文件上传功能(4)                
</param>
文件上传struts2 实现文件上传功能(4)                
<param name="inputName">downloadFile</param>
文件上传struts2 实现文件上传功能(4)            
</result>
文件上传struts2 实现文件上传功能(4)        
</action>
结果:
文件上传struts2 实现文件上传功能(4)