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

2、多文件上传
修改action

     private  List < File >  file;
    
private  List < String >  fileFileName;
    
private  List < String >  fileContentType;
     public  String execute()  throws  Exception  {
        
for (int i = 0; i < file.size(); ++i) {
            InputStream is 
= new FileInputStream(file.get(i));
            String root 
= ServletActionContext.getRequest().getRealPath(
                    
"/upload");
            File destFile 
= new File(root, this.getFileFileName().get(i));
            OutputStream os 
= new FileOutputStream(destFile);
            
byte[] buffer = new byte[400];

            
int length = 0;

            
while ((length = is.read(buffer)) > 0{
                os.write(buffer, 
0, length);
            }

            is.close();
            os.close();
        }

        
return SUCCESS;
    }
修改upload3.jsp
                 < tr >
                    
< td >
                        file1
                    
</ td >
                    
< td >
                        
< s:file  name ="file" ></ s:file >
                    
</ td >
                
</ tr >
                
< tr >
                    
< td >
                        file2
                    
</ td >
                    
< td >
                        
< s:file  name ="file" ></ s:file >
                    
</ td >
                
</ tr >
                
< tr >
                    
< td >
                        file3
                    
</ td >
                    
< td >
                        
< s:file  name ="file" ></ s:file >
                    
</ td >
                
</ tr >
结果:




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

            td.appendChild(br);
            td.appendChild(input);
            td.appendChild(button);
        }

    
</ script >
                 < tr >
                    
< td >
                        file1
                    
</ td >
                    
< td  id ="more" >
                        
< s:file  name ="file" ></ s:file >
                        
< input  type ="button"  value ="Add More.."  onclick ="addMore()" >
                    
</ td >
                
</ tr >

结果:


(四)文件上传类型、大小的限制
使用struts的拦截器,struts2-core-2.1.6.jar/org.apache.struts2.interceptor.FileUploadInterceptor.class的源码中我们可以看到:
public class FileUploadInterceptor extends AbstractInterceptor {

    private static final long serialVersionUID = -4764627478894962478L;

    protected static final Logger LOG = LoggerFactory.getLogger(FileUploadInterceptor.class);
    private static final String DEFAULT_MESSAGE = "no.message.found";

    protected boolean useActionMessageBundle;

    protected Long maximumSize;
    protected Set
< String >  allowedTypesSet = Collections.emptySet();
    protected Set
< String >  allowedExtensionsSet = Collections.emptySet();
所以我们只需的struts.xml中配置它的属性allowedTypesSet即可。在action节点中修改拦截器(默认的拦截器中已经有fileUpload拦截器,我们必须提取出来进行参数设置,然后在加上默认的拦截器)。
         < action  name ="upload"  class ="com.test.action.UploadAction" >
            
< result  name ="success" > /upload/result3.jsp </ result >
            
< result  name ="input" > /upload/upload3.jsp </ result >
            
< interceptor-ref  name ="fileUpload" >
                
< param  name ="maximumSize" > 409600 </ param >
                
< param  name ="allowedTypes" >
                    application/vnd.ms-powerpoint
                
</ param >
            
</ interceptor-ref >
            
< interceptor-ref  name ="defaultStack" ></ interceptor-ref >
        
</ action >
其中 < param  name ="allowedTypes" > application/vnd.ms-powerpoint </ param >allowedTypes的值可在C:\Tomcat 6.0\conf的web.xml文件中查找。

报错信息:
严重: Content - Type not allowed: file  " intrl.txt "   " upload__138d8aca_120b73e9cf4__8000_00000002.tmp "  text / plain


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

14
15    @Override
16    public String execute() throws Exception {
17        return SUCCESS;
18    }

19}

20
web.xml中action配置
         < action  name ="download"
            class
="com.test.action.DownloadAction" >
            
< result  name ="success"  type ="stream" >
                
< param  name ="contentType" >
                    application/vnd.ms-powerpoint
                
</ param >
                
< param  name ="contentDisposition" >
                    filename="intrl.ppt"
                
</ param >
                
< param  name ="inputName" > downloadFile </ param >
            
</ result >
        
</ action >
结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值