免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Struts2教程7:上傳任意多個(gè)文件

一、上傳單個(gè)文件

    上傳文件是很多Web程序都具有的功能。在Struts1.x中已經(jīng)提供了用于上傳文件的組件。而在Struts2中提供了一個(gè)更為容易操作的上傳文件組件。所不同的是,Struts1.x的上傳組件需要一個(gè)ActionForm來傳遞文件,而Struts2的上傳組件是一個(gè)攔截器(這個(gè)攔截器不用配置,是自動(dòng)裝載的)。在本文中先介紹一下如何用struts2上傳單個(gè)文件,最后介紹一下用struts2上傳任意多個(gè)文件。

    要用Struts2實(shí)現(xiàn)上傳單個(gè)文件的功能非常容易實(shí)現(xiàn),只要使用普通的Action即可。但為了獲得一些上傳文件的信息,如上傳文件名、上傳文件類型以及上傳文件的Stream對(duì)象,就需要按著一定規(guī)則來為Action類增加一些gettersetter方法。

    Struts2中,用于獲得和設(shè)置java.io.File對(duì)象(Struts2將文件上傳到臨時(shí)路徑,并使用java.io.File打開這個(gè)臨時(shí)文件)的方法是getUploadsetUpload。獲得和設(shè)置文件名的方法是getUploadFileNamesetUploadFileName,獲得和設(shè)置上傳文件內(nèi)容類型的方法是getUploadContentTypesetUploadContentType。下面是用于上傳的動(dòng)作類的完整代碼:


package action;

import java.io.*;
import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport 
{
    
private File upload;
    
private String fileName;
    
private String uploadContentType;
    
    
public String getUploadFileName()
    {
        
return fileName;
    }

    
public void setUploadFileName(String fileName)
    {
        
this.fileName = fileName;
    }

    
public File getUpload()
    {
        
return upload;
    }

    
public void setUpload(File upload)
    {
        
this.upload = upload;
    }
    
public void setUploadContentType(String contentType)
    {
        
this.uploadContentType=contentType;
    
    }
    
    
public String getUploadContentType()
    {
        
return this.uploadContentType;
    }
    
public String execute() throws Exception
    {   
        java.io.InputStream is 
= new java.io.FileInputStream(upload);
        java.io.OutputStream os 
= new java.io.FileOutputStream("d:\\upload\\" + fileName);
        
byte buffer[] = new byte[8192];
        
int count = 0;
        
while((count = is.read(buffer)) > 0)
        {
            os.write(buffer, 
0, count);
        }
        os.close();
        is.close();
        
return SUCCESS;
    }
}

    在execute方法中的實(shí)現(xiàn)代碼就很簡單了,只是從臨時(shí)文件復(fù)制到指定的路徑(在這里是d:\upload)中。上傳文件的臨時(shí)目錄的默認(rèn)值是javax.servlet.context.tempdir的值,但可以通過struts.properties(和struts.xml在同一個(gè)目錄下)的struts.multipart.saveDir屬性設(shè)置。Struts2上傳文件的默認(rèn)大小限制是2M2097152字節(jié)),也可以通過struts.properties文件中的struts.multipart.maxSize修改,如struts.multipart.maxSize=2048 表示一次上傳文件的總大小不能超過2K字節(jié)。

    下面的代碼是上傳文件的JSP頁面代碼


<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<html>
    
<head>
        
<title>上傳單個(gè)文件</title>
    
</head>

    
<body>
        
<s:form action="upload" namespace="/test"
            enctype
="multipart/form-data">
            
<s:file name="upload" label="輸入要上傳的文件名" />
            
<s:submit value="上傳" />
        
</s:form>

    
</body>
</html>

也可以在success.jsp頁中通過<s:property>獲得文件的屬性文件名和文件內(nèi)容類型),代碼如下

    <s:propertyvalue="uploadFileName"/>

二、上傳任意多個(gè)文件

    Struts2中,上傳任意多個(gè)文件也非常容易實(shí)現(xiàn)。首先,要想上傳任意多個(gè)文件,需要在客戶端使用DOM技術(shù)生成任意多個(gè)<input type=”file” />標(biāo)簽。name屬性值都相同。代碼如下:

<html>
    
<head>
        
<script language="javascript">

function addComponent()
{
        
var uploadHTML = document.createElement( "<input type=‘file‘  name=‘upload‘/>");
        document.getElementById(
"files").appendChild(uploadHTML);
        uploadHTML 
= document.createElement( "<p/>");
        document.getElementById(
"files").appendChild(uploadHTML);
}
</script>
    
</head>
    
<body>
        
<input type="button" onclick="addComponent();" value="添加文件" />
        
<br />
        
<form onsubmit="return true;" action="/struts2/test/upload.action"
            method
="post" enctype="multipart/form-data">
            
<span id="files"> <input type=‘file‘ name=‘upload‘ />
                
</>
            
</span>
            
<input type="submit" value="上傳" />
        
</form>
    
</body>

</html>
     上面的javascript代碼可以生成任意多個(gè)<input type=’file’>標(biāo)簽,name的值都為file(要注意的是,上面的javascript代碼只適合于IE瀏覽器,firefox等其他瀏覽器需要使用他的代碼)。至于Action類,和上傳單個(gè)文件的Action類基本一至,只需要將三個(gè)屬性的類型改為List即可。代碼如下:
package action;

import java.io.*;
import com.opensymphony.xwork2.ActionSupport;

public class UploadMoreAction extends ActionSupport
{
    
private java.util.List<File> uploads;
    
private java.util.List<String> fileNames;
    
private java.util.List<String> uploadContentTypes;

    
public java.util.List<String> getUploadFileName()
    {
        
return fileNames;
    }
    
public void setUploadFileName(java.util.List<String> fileNames)
    {
        
this.fileNames = fileNames;
    }
    
public java.util.List<File> getUpload()
    {
        
return uploads;
    }

    
public void setUpload(java.util.List<File> uploads)
    {
        
this.uploads = uploads;
    }

    
public void setUploadContentType(java.util.List<String> contentTypes)
    {
        
this.uploadContentTypes = contentTypes;

    }

    
public java.util.List<String> getUploadContentType()
    {
        
return this.uploadContentTypes;
    }

    
public String execute() throws Exception
    {
        
if (uploads != null)
        {
            
int i = 0;
            
for (; i < uploads.size(); i++)
            {
                java.io.InputStream is 
= new java.io.FileInputStream(uploads.get(i));
                java.io.OutputStream os 
= new java.io.FileOutputStream(
                        
"d:\\upload\\" + fileNames.get(i));
                
byte buffer[] = new byte[8192];
                
int count = 0;
                
while ((count = is.read(buffer)) > 0)
                {
                    os.write(buffer, 
0, count);
                }
                os.close();
                is.close();
            }
        }
        
return SUCCESS;
    }
}

    在execute方法中,只是對(duì)List對(duì)象進(jìn)行枚舉,在循環(huán)中的代碼和上傳單個(gè)文件時(shí)的代碼基本相同。如果讀者使用過struts1.x的上傳組件,是不是感覺Struts2的上傳功能更容易實(shí)現(xiàn)呢?Struts1.x中上傳多個(gè)文件時(shí),可是需要建立帶索引的屬性的。而在Struts2中,就是這么簡單就搞定了。1是上傳任意多個(gè)文件的界面。



1

    在本文中給出了用Struts2上傳任意多個(gè)文件的一個(gè)方法,如果哪位讀者有更好的方法,請跟貼!
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
jQuery上傳插件Uploadify 3.2 上傳文件
struts2 文件上傳示例1_普通上傳
ExtJS之上傳文件示例【struts2方式】
《Java Web應(yīng)用程序開發(fā)》10 Java實(shí)用技術(shù)
Struts2多文件下載
struts2的文件上傳和下載
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服