<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220
         關(guān)于如何在項(xiàng)目中添加struts2這里就不在多說了,struts2上傳下載所需要的jar包大家可以去www.apache.org進(jìn)行下載,在Jakarta下的選擇
     Commons,然后下載FileUpload 和 IO這兩個jar包。解壓后拷貝到你的項(xiàng)目lib文件夾下就OK了。

         下面直接開始struts2的上傳:

         首先創(chuàng)建一個文件上傳的Action,以下注釋部分為批量上傳時的代碼,大同小異!
        
    public class UploadAction extends ActionSupport {
      
       。。。省略了 getter 和 setter方法
      
       
    private String title;
        
    //單個文件 
        private File upload;
        
        
        
    // 多個文件
        
    // private String[] upload;
        
    //保存上傳文件的文件夾名字,可在配置文件中動態(tài)指定
       
        
    private String savePath;
        
        
    private String uploadContentType;
       
        
    private String uploadFileName;

        
    public String getSavePath() {
             String s 
    =  ServletActionContext.getRequest().getRealPath(savePath);
             System.out.println(s);
             
    return s;
        }

        @Override
        
    public String execute() throws Exception {
            System.out.println(
    "進(jìn)入 execute方法");
            
    //查看上傳文件的大小
            System.out.println("所上傳的文件的大小為"+getUpload().length());
            
            
    //查看上傳文件的名字
            System.out.println("UploadFileName:"+getUploadFileName());
            
            
    //指定上傳文件到哪個文件夾
            FileOutputStream fos = new FileOutputStream(savePath+"\\"
                    
    +getUploadFileName());
            
    //取得一個將要上傳的文件的一個輸入流
            FileInputStream fis = new FileInputStream(getUpload());
            
            
    //當(dāng)圖片需要存儲進(jìn)數(shù)據(jù)庫時,可以將圖片的連接存儲進(jìn)數(shù)據(jù)庫,譬如:
            
    //path路徑是需要讀進(jìn)數(shù)據(jù)庫滴,所以這里不能使用 getSavePath(),因?yàn)檫@樣返回的是絕對路徑。
            String path = savePath+"\\"+getUploadFileName();
            
            
    byte[] buffer = new byte[1024];
            
            
    int len = 0 ;
            
            
    while((len = fis.read(buffer))>0) {
                fos.write(buffer, 
    0, len);
            }
            System.out.println(
    "文件已上傳");
            
            
    return SUCCESS;
        }

        
    //完成多個文件的上傳
    //    public String execute() throws Exception {
    //
    //        
    //        //查看上傳文件的名字
    //        System.out.println("UploadFileName:"+getUploadFileName());
    //        
    //        //指定上傳文件到哪個文件夾
    //        FileOutputStream fos = new FileOutputStream(savePath+"\\"
    //                +getUploadFileName());
    //        
    //        String[] ss = getUpload();
    //        for(int i=0;i<ss.length;i++){
    //            //取得一個將要上傳的文件的一個輸入流
    //        FileInputStream fis = new FileInputStream(ss[i]);
    //        
    //        //當(dāng)圖片需要存儲進(jìn)數(shù)據(jù)庫時,可以將圖片的連接存儲進(jìn)數(shù)據(jù)庫,譬如:
    //        //path路徑是需要讀進(jìn)數(shù)據(jù)庫滴
    //        String path = savePath+"\\"+getUploadFileName();
    //        
    //        byte[] buffer = new byte[1024];
    //        
    //        int len = 0 ;
    //        
    //        while((len = fis.read(buffer))>0) {
    //            fos.write(buffer, 0, len);
    //        }    

    //        return SUCCESS ; 
    //    }
      

        
    }

    文件上傳的頁面index.jsp
    <body>
          
    <s:fielderror/>
          
    <s:form action="ryanUpload" enctype="multipart/form-data">
            
    <s:textfield label="title" name="title"/>
                
    <!-- 單個文件上傳 -->
             
    <s:file name="upload" label="文件1"/>     
            
    <!-- 多個文件上傳 
           
            
    <s:file name="upload" label="文件1"/>
            
    <s:file name="upload" label="文件2"/>
            
    <s:file name="upload" label="文件3"/>

          
    -->
          
    <s:submit/>
          
    </s:form>
      
    </body>
    在來看看struts.xml中的配置,
    <struts>
         
    <constant name="struts.i18n.encoding" value="GBK"/>
         
         
    <package name="ryan" extends="struts-default">
         
            
    <action name="ryanUpload" class="com.UploadAction">
                
    <result name="success">/succ.jsp</result>
              
                
    <result name="input">/index.jsp</result>
               
                
    <!-- 動態(tài)指定上傳文件的目錄 -->
                 
    <param name="savePath">/upload</param>   <!--  在此處可以動態(tài)的指定服務(wù)器上存儲圖片的文件夾 --> 
                
                
    <interceptor-ref name="fileUpload">
                   
    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
                   
    <param name="maximumSize">3000000000</param>  <!--  這里的單位為字節(jié)  -->
                
    </interceptor-ref>
                
                
    <interceptor-ref name="defaultStack"/>
            
    </action>
          
             
            
        
    </package>

    </struts>

    struts2下載(參考了beansoft的文章):
       
       
      一般在項(xiàng)目中所用到下載都是直接根據(jù)數(shù)據(jù)庫讀出的地址來進(jìn)行下載,譬如有下面一個鏈接:
     
       <!-- 假設(shè)有這樣一條從數(shù)據(jù)庫中讀出的數(shù)據(jù) ,它的存儲路徑為 downLoad/ryan.jsp ,文件名字為ryan.jsp
                    很明顯這是一張圖片,那么我們點(diǎn)擊下載時就會根據(jù)path來進(jìn)行下載
                                                         
    -->

        <s:url action="downLoad" id="down">
          <s:param name="inputPath">downLoad/ryan.jsp</s:param>
          <s:param name="fileName">ryan.jsp</s:param>
        </s:url>
       
        <s:a href="%{down}">downLoad</s:a>


    來看看我們的struts.xml中的配置

    <struts>
      
    <package  name="technicalInformationAction"   extends="Action">
       
        
    <default-action-ref name="download"/>
     

         
    <action name="downLoad" class="com.DownLoadAction">
                   
                    <!--這里的返回值并不是字符串,而是一個流類型-->  
                    
    <result name="success" type="stream">
                    
                    
    <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
                    
                    
    <param name="inputName">inputStream</param>
                 
           
                     <!--這里需要將文件名進(jìn)行轉(zhuǎn)碼,轉(zhuǎn)碼后將值賦予
    downloadFileName, 對應(yīng)文中的getDownloadFileName()-->        
                    
    <param name="contentDisposition">attachment;filename="${downloadFileName}"</param> 
                   
                    
    <param name="bufferSize">4096</param>
                    
                    
    </result> 
         
    </action> 
      
      
    </package>
    </struts>

    下載文件的DownLoadAction:

    public class DownLoadAction implements Action{

        
    private String fileName;// 初始的通過param指定的文件名屬性

        
    private String inputPath;// 指定要被下載的文件路徑
        
        String username 
    = "chenyanhu";

        
    public InputStream getInputStream() throws Exception {

        
    // 通過 ServletContext,也就是application 來讀取數(shù)據(jù)
       
        
    return ServletActionContext.getServletContext().getResourceAsStream("/"+inputPath);

        }
        
         /**
          *   execute中代碼的含義是為了防止他人惡意的下載項(xiàng)目的WEB-INF/web.xml文件,譬如在瀏覽器中輸入
          *  http://......./downLoad.action?inputPath=WEB-INF/web.xml  這樣將下載下的文件后綴名改為xml就可以查看你的項(xiàng)目的web.xml了

          *  execute中代碼的意思是將文件存儲的真實(shí)目錄與地址欄的路徑進(jìn)行對比。
    發(fā)現(xiàn)企圖下載不在/download下的文件,就顯示內(nèi)容為空
          */ 
       

    public
     String execute()
            
            
    // 文件下載目錄路徑

            String downloadDir = ServletActionContext.getServletContext().getRealPath("/technicalInformationDirectory"+"/"+username);

            
    // 文件下載路徑

            String downloadFile 
    = ServletActionContext.getServletContext().getRealPath("/"+inputPath);

            java.io.File file 
    = new java.io.File(downloadFile);
       try{
            downloadFile 
    = file.getCanonicalPath();// 真實(shí)文件路徑,去掉里面的..等信息

            
    if(!downloadFile.startsWith(downloadDir)) {

            
    return null;

            }
       }catch (IOException io) {
            // TODO: handle exception
            System.out.println("IO異常?。÷窂桨l(fā)生錯誤!");
            io.printStackTrace();
        }catch (SecurityException se) {
            // TODO: handle exception
            System.out.println("安全性異常!!");
            se.printStackTrace();
        }catch (NullPointerException  npe ) {
            System.out.println("空指針異常");
            npe.printStackTrace();
        }catch (Exception e) {
            System.out.println("出現(xiàn)異常了!");
            e.printStackTrace();
        }
            
    return SUCCESS;     
            

        }



        
    // 提供轉(zhuǎn)換編碼后的供下載用的文件名 

        
    public String getDownloadFileName() {

        String downFileName 
    = fileName;

        
    try {

        downFileName 
    = new String(downFileName.getBytes(), "ISO8859-1");

        } 
    catch (UnsupportedEncodingException e) {

        e.printStackTrace();

        }

        
    return downFileName;

        }
      


        }
       


    關(guān)于中文轉(zhuǎn)碼的問題:
        
          我在項(xiàng)目中遇到了一個問題,那就是下載文件的時候,不能對含有中文名字的文件進(jìn)行下載,老是出現(xiàn)亂碼,但是數(shù)據(jù)庫中
      
        是沒有亂碼的,今天花了比較長的時間去解決這個問題,不過現(xiàn)在我已經(jīng)把這個問題解決, 就是需要修改tomcat的server.xml文件  :
     
                  <Connector port="8641" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" URIEncoding="utf-8"/>
      
        加上紅色部分就OK了??!




                                                                                                           --    學(xué)海無涯
            

    Feedback

    # re: sturts2的上傳和下載以及中文轉(zhuǎn)碼問題  回復(fù)  更多評論   

    2009-09-05 09:21 by aasd
    sdf
    主站蜘蛛池模板: 99re6免费视频| 亚洲人成电影亚洲人成9999网| 999任你躁在线精品免费不卡| 亚洲av永久无码天堂网| 亚洲成AV人片在WWW色猫咪 | 亚洲精品夜夜夜妓女网 | 亚洲人成电影网站色www| 亚洲成a人片77777老司机| 亚洲 无码 在线 专区| 很黄很色很刺激的视频免费| 久久er国产精品免费观看2| 五月天婷婷免费视频| 亚洲av无码成人影院一区| 亚洲校园春色另类激情| 久久久国产精品福利免费| 青娱乐在线免费观看视频| 亚洲日本VA午夜在线影院| 亚洲国产福利精品一区二区| 国产AV无码专区亚洲Av| 亚洲人成伊人成综合网久久久| 亚洲av手机在线观看| 国产一区二区三区免费在线观看| 无码一区二区三区AV免费| AV无码免费永久在线观看| 日本最新免费网站| 亚洲美女免费视频| 日韩亚洲综合精品国产| 亚洲第一综合天堂另类专| 亚洲日本一线产区和二线 | 黄色视屏在线免费播放| 成年网站免费入口在线观看| 黄色一级视频免费观看| 成人婷婷网色偷偷亚洲男人的天堂 | 亚洲国产美国国产综合一区二区| 亚洲一区二区视频在线观看| 亚洲午夜无码AV毛片久久| 亚洲人成无码网WWW| 国产精品亚洲综合专区片高清久久久| 一区二区三区福利视频免费观看| 精品国产污污免费网站| 免费人妻无码不卡中文字幕系|