天天看點

Struts 2實作檔案的上傳下載下傳(解除檔案大小限制) Struts 2實作檔案的上傳下載下傳 環境上傳檔案下載下傳檔案

Struts 2實作檔案的上傳下載下傳

上傳:

Struts 2實作檔案的上傳下載下傳(解除檔案大小限制) Struts 2實作檔案的上傳下載下傳 環境上傳檔案下載下傳檔案

下載下傳:

Struts 2實作檔案的上傳下載下傳(解除檔案大小限制) Struts 2實作檔案的上傳下載下傳 環境上傳檔案下載下傳檔案

環境

MyEclipse 2014

Tomcat:apache-tomcat-8.0.46

JDK:1.7

Sturts版本:2.1

Struts 2實作檔案的上傳下載下傳(解除檔案大小限制) Struts 2實作檔案的上傳下載下傳 環境上傳檔案下載下傳檔案

上傳檔案

1.上傳檔案界面

index.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
    <title>檔案上傳</title>
</head>
<body>
    <s:form action="myupload" method="post" enctype="multipart/form-data">
        <s:file name="upload" label="上傳的檔案"></s:file>
        <s:submit value="上傳"></s:submit>
    </s:form>
</body>
</html>
           

顯示界面

success.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
    <title>成功頁面</title>
</head>
<body>
    恭喜你!上傳成功!你上傳的圖檔如下:<br/>
    <a href="uploadfile/<s:property value="uploadFileName"/>"><img src=uploadfile/<s:property value="uploadFileName"/>></a>
</body>
</html>

           

2.檔案上傳功能

UploadAction.java

package org.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
    private File upload;                            //上傳檔案
    //屬性upload的get/set方法
    public File getUpload() {
        return upload;
    }
    public void setUpload(File upload) {
        this.upload = upload;
    }


    private String uploadFileName;                      //上傳的檔案名
    //屬性uploadFileName的get/set方法
    public String getUploadFileName() {
        return uploadFileName;
    }
    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    public String execute() throws Exception {
        InputStream is=new FileInputStream(getUpload());    //根據上傳的檔案得到輸入流

        String directory = "/uploadfile";

        String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);

        OutputStream os=new FileOutputStream(targetDirectory + "/" +uploadFileName);  //指定輸出流位址

        byte buffer[]=new byte[];   
        int count=;
        while((count=is.read(buffer))>){
            os.write(buffer,,count);                   //把檔案寫到指定位置的檔案中
        }
        os.close();                                 //關閉
        is.close();
        return SUCCESS;                             //傳回
    }
}
           

3.在

struts.xml

中配置action

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

    <package name="default" extends="struts-default">
        <action name="myupload" class="org.action.UploadAction">
            <result name="success">/success.jsp</result>
        </action>

    </package>
</struts>    
           

這時候通路http://localhost:8080/Ex5.3/index.jsp已經可以上傳比較小的檔案(<2M),但是一旦上傳較大的檔案就會報錯

要修改檔案大小限制,可以在Struts 2的配置檔案

struts.properties

中修改

struts.multipart.maxSize

常量值,但是我們去找這個檔案還是比較麻煩的,是以選擇在

struts.xml

檔案中加入下面這一行代碼。

<constant name="struts.multipart.maxSize" value="1073741824" />
           

後面的數字可以根據自己的需要修改

下載下傳檔案

1.把檔案複制到開發目錄

Struts 2實作檔案的上傳下載下傳(解除檔案大小限制) Struts 2實作檔案的上傳下載下傳 環境上傳檔案下載下傳檔案

2.下載下傳界面

download.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
    <title>檔案下載下傳</title>
</head>
<body>
    <a href="downloadAction.action">下載下傳連結</a>
</body>
</html>
           

3.

DownloadAction.java

package org.action;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport{
    private String downloadFile;    //需要下載下傳的檔案路徑
    public String getDownloadFile() {
        return downloadFile;
    }
    public void setDownloadFile(String downloadFile) {
        this.downloadFile = downloadFile;
    }
    public InputStream getTargetFile(){     //根據上面給出的檔案路徑,生成它的輸入流
        return ServletActionContext.getServletContext().getResourceAsStream(downloadFile);
    }

    public String execute() throws Exception{
        return SUCCESS;
    }
}

           

4.在

struts.xml

配置action

<action name="downloadAction" class="org.action.DownloadAction">
            <!-- 傳遞參數,指定要下載下傳的檔案的路徑 -->
            <param name="downloadFile">/downloadfile/實驗5.docx</param>
            <result name="success" type="stream">
                <!--  輸入流名稱,對應Action類中的getTargetFile()方法 -->
                <param name="inputName">targetFile</param>
                <!--  設定下載下傳檔案的檔案名 -->
                <param name="contentDisposition">filename="example.docx"</param>
                <!-- 指定下載下傳檔案時緩沖區的大小 -->
                <param name="bufferSize">4096</param>
            </result>
        </action>
           

通路http://localhost:8080/Ex5.3/download.jsp就可以點選連結下載下傳檔案了