1. 程式人生 > >struts2實現檔案上傳與下載

struts2實現檔案上傳與下載

一、單檔案上傳

1、檔案上傳條件:
(1)請求方法必須是post
(2)enctype的屬性值必須為multipart/form-data
(3)提供一個檔案選擇域
2、檔案上傳jsp程式碼

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>上傳</title> </head> <body> <s:actionerror/> <s:form action="upload.action" enctype="multipart/form-data"> <s:textfield name="userName" label="使用者名稱"
/>
<s:file name="photo" label="照片"/> <s:submit value="上傳"/> </s:form> </body> </html>

3、檔案上傳編寫動作類注意:
(1)struts2提供的上傳檔名命名規則:上傳的欄位名(form表單中的)+fileName
(2)struts2提供MIME型別命名規則:上傳的欄位名(form表單中的)+contentType
(3)沒有使用模型驅動時:form表單提供的屬性和struts2提供的屬性要生成set和get方法
4、上傳檔案動作類程式碼

package com.san.action;
import java.io.File;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Upload extends ActionSupport{
    private static final long serialVersionUID = 1L;
    //表單提供的屬性
    private String userName;
    private File photo;
    //struts2在檔案上傳時提供的屬性
    private String photoFileName;//上傳的檔名(上傳的欄位名+fileName)
    private String photoContentType;//上傳檔案的MIME型別(上傳的欄位名+contentType)
    public String upload(){
        //1、拿到servletContext
        ServletContext application=ServletActionContext.getServletContext();
        //String filePath=application.getRealPath("/WEB-INF/files");
        //2、呼叫realPath方法,獲取一個虛擬目錄而得到一個真實的目錄
        String filePath=application.getRealPath("/WEB-INF/files");
        File file=new File(filePath);
        //3、如果真實目錄不存在則建立
        if(!file.exists()){
            file.mkdirs();
        }
        //4、把photo存過去
        photo.renameTo(new File(file,photoFileName));
        return null;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public File getPhoto() {
        return photo;
    }
    public void setPhoto(File photo) {
        this.photo = photo;
    }
    public String getPhotoFileName() {
        return photoFileName;
    }
    public void setPhotoFileName(String photoFileName) {
        this.photoFileName = photoFileName;
    }
    public String getPhotoContentType() {
        return photoContentType;
    }
    public void setPhotoContentType(String photoContentType) {
        this.photoContentType = photoContentType;
    }
}

5、編寫struts.xml配置檔案注意:
(1)上傳檔案預設為2兆,修改上傳限制時,value的值應該是算出來的,不能寫成這種形式1024*1024*5(修改為5兆)
(2)限制檔案的副檔名時,如果有多個限制條件用逗號隔開
(3)限制檔案的MIME時,如果有多個條件時用逗號隔開;jpg形式的圖片寫成jpeg不能寫成jpg
6、struts.xml程式碼

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- 開啟靜態方法呼叫 -->
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
    <!-- 設定開發者模式 -->
    <constant name="struts.devMode" value="true"></constant>
    <!-- 限制檔案上傳的大小 (預設為2兆)-->
    <constant name="struts.multipart.maxSize" value="5242880"></constant>
    <!-- 配置全域性訊息資源包,解決英文問題 -->
    <constant name="struts.custom.i18n.resources" value="fileupload_message"></constant>
    <package name="p1" extends="struts-default">

        <!-- 上傳1 -->
        <action name="upload" class="com.san.action.Upload" method="upload">
            <!-- 限制檔案的副檔名,如果有多個限制條件用逗號隔開
            <interceptor-ref name="defaultStack">
                <param name="fileUpload.allowedExtensions">jpg</param>
            </interceptor-ref>
             -->
             <!-- 限制檔案的MIME,如果有多個檔案時使用逗號隔開 -->
             <interceptor-ref name="defaultStack">
                <param name="fileUpload.allowedTypes">image/jpeg</param>
             </interceptor-ref>
            <result name="input">upload.jsp</result>
        </action>
    </package>
</struts>

7、將不符合條件的上傳的英文提示改為中文提示
(1)建立一個properties檔案

struts.messages.error.content.type.not.allowed=\u8F93\u5165\u6B63\u786E\u7684\u5404\u5F0F\: {0} "{1}" "{2}" {3}

(2)struts.xml中,配置全域性資源包

<!--value為properties檔案的名字-->
<constant name="struts.custom.i18n.resources" value="fileupload_message"></constant>

(3)效果如下:
這裡寫圖片描述
這裡寫圖片描述

二、多檔案上傳

1、只需要修改動作類中程式碼,其他的不變;程式碼如下

private String userName;
    private File[] photo;
    //struts2提供的兩個屬性
    private String[] photoFileName;//檔名(表單欄位屬性+fileName)
    private String[] photoContentType;//檔案MIME屬性
    public String upload2(){
        ServletContext application=ServletActionContext.getServletContext();
        //獲取路徑
        String filePath=application.getRealPath("/WEB-INF/files2");
        //判斷路徑是否存在
        File file=new File(filePath);
        if(!file.exists()){
            //路徑不存在時,建立
            file.mkdirs();
        }
        //遍歷把檔案剪下到建立的檔案中
        for(int i=0;i<photo.length;i++){
            photo[i].renameTo(new File(file,photoFileName[i]));
        }
        return null;
    }

三、檔案下載

1、檔案下載的struts.xml配置程式碼

<package name="p2" extends="struts-default">
        <action name="download" class="com.san.action.Download" method="download">
            <!--stream型別:直接向頁面輸出二進位制資料 -->
            <result name="success" type="stream">
                <!-- 給stream結果檢視注入引數:Content-Type -->
                <param name="contentType">application/octet-stream</param>
                <!-- 告知瀏覽器一什麼方式開啟 ${@[email protected](filename,"UTF-8")}-->
                <param name="contentDisposition">attachment;filename=1.jpg</param>
                <!-- 注入位元組流,取值要寫動作類中的set方法名稱,首字母改成小寫 -->
                <param name="inputName">inputStream</param>
            </result>
        </action>
    </package>

2、檔案下載的動作類程式碼

package com.san.action;

import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Download extends ActionSupport{
    private static final long serialVersionUID = 1L;
    //指定InputStream的名稱時,不能使用in
    private InputStream inputStream;
    //建立一個檔名屬性
    private String filename;
    public String download() throws Exception{
        //1、找到檔案儲存位置
        String filePath=ServletActionContext.getServletContext().getRealPath("/WEB-INF/files/1.jpg");
        //2、把檔案讀入到InputStream流中
        inputStream=new FileInputStream(filePath);
        //3、給檔名賦值
        filename="照片.jpg";
        return SUCCESS;
    }
    public InputStream getInputStream() {
        return inputStream;
    }
    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }
    public String getFilename() {
        return filename;
    }
    public void setFilename(String filename) {
        this.filename = filename;
    }
}

相關推薦

struts2實現檔案下載功能

一、Demo介紹 基於struts2框架,實現多檔案的上傳和下載功能。 實現原理圖: 部分介面圖: 上傳成功及下載頁面: 二、主要程式碼 uploadFile.jsp:在form表單中包含一個文字框(上傳使用者的姓名)和兩個檔案上傳選項. <%@

struts2實現檔案下載

一、單檔案上傳 1、檔案上傳條件: (1)請求方法必須是post (2)enctype的屬性值必須為multipart/form-data (3)提供一個檔案選擇域 2、檔案上傳jsp程式碼 <%@ page language="java" c

Struts2檔案下載

1、檔案上傳三種方式: 將檔案以二進位制的形式儲存到資料庫中 activiti工作流框架  將檔案儲存到專門檔案伺服器(存放檔案用的Linux系統)中  直接將檔案儲存到伺服器(tomcat所在伺服器)中 2、檔案上傳的一個例項: action裡

Http伺服器實現檔案下載(二)

一、引言 歡迎大家接著看我的部落格,如何大家有什麼想法的話回覆我哦,閒話不多聊了,接著上一講的內容來說吧,在上一節中已經講到了請求頭字串的解析,並且在解析中我我們已經獲取了url。就是上節中提到的/doing。當瀏覽器傳送了/doing請求後,這是的與伺服器的連線並沒有

Http伺服器實現檔案下載(五)

一、引言      歡迎大家和我一起編寫Http伺服器實現檔案的上傳和下載,現在我回顧一下在上一章節中提到的一些內容,之前我已經提到過檔案的下載,在檔案的下載中也提到了檔案的續下載只需要在響應頭中填寫Content-Range這一欄位,並且伺服器的檔案指標指向讀取的指定

Http伺服器實現檔案下載(一)

一、引言   大家都知道web程式設計的協議就是http協議,稱為超文字傳輸協議。在J2EE中我們可以很快的實現一個Web工程,但在C++中就不是非常的迅速,原因無非就是底層的socket網路編寫需要自己完成,上層的http協議需要我們自己完成,使用者介面需要我們自己完

Http伺服器實現檔案下載(三)

一、引言   在前2章的內容基本上已經講解了整個的大致流程。在設計Http伺服器時,我設計為四層的結構,最底層是網路傳輸層,就是socket程式設計。接著一層是請求和響應層,叫做Request和Response。在上一層是URL解析流程走向層。最頂層我設計為索引層。這一層主要多檔案時對檔案進行記憶體上的索引

Http伺服器實現檔案下載(四)

一、引言   歡迎大家來到和我一起編寫Http伺服器實現檔案的上傳和下載,現在我稍微回顧一下之前我說的,第一、二章說明說明了整體的HTTP走向,第三章實現底層的網路程式設計。接著這一章我想給大家講的是請求獲取,和響應傳送的內容。這裡主要講解的響應內容,為什麼?因為我們編寫的是一個與瀏覽器互動的HTTP伺服器

JAVA通訊(1)-- 使用Socket實現檔案下載

客戶端 /** * 檔案上傳客戶端 * * @author chen.lin * */ public class UploadClient extends JFrame { /** * */ priva

使用jsp/servlet簡單實現檔案下載

public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,

Spring 實現檔案下載

檔案上傳 upload.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="

七、Struts2檔案下載

  一、Struts2檔案上傳 Struts2的檔案上傳實現非常簡單,只需要簡單幾步就可完成; 注意: (1)檔案上傳的struts2標籤為:<s:file name="" label="上傳"/> (2)檔案上傳的前提是表單屬性method="post" e

java實現檔案下載

           東風化宇,檔案上傳 一、對於檔案上傳,瀏覽器在上傳的過程中是將檔案以流的形式提交到伺服器端的,Servlet獲取上傳檔案的輸入流然後再解析裡面的請求引數是比較麻煩。 JSP程式碼,POST請求,表單必須設定為enctype="multipar

Struts2實現檔案,多檔案下載(十)

    “兩個蝴蝶飛”特別喜歡"java1234知識分享網"小峰的實用主義,所以本文及其系列文章均是採用實用主義,從專案和程式碼的角度去分析。由於本人經驗有限,嘴皮子不溜,所以學術性,概念性,底層性的知識點暫時不做介紹。文章中有錯誤之處,歡迎拍磚和指點。特別感謝"java12

struts2 檔案下載

檔案上傳: 三種上傳方案 虛擬路徑與真實路徑 /upload copyFile與copydirectory 檔案上傳的三種方案 1.將上傳的檔案以二進位制的形式存放到資料庫 oa系統 activiti工作流框架 2.將檔案上傳到檔案伺服器(硬碟足夠大)中 3.上傳到t

Struts2 實現檔案下載

檔案上傳對Struts2來說是一件非常容易的事情。Struts2檔案上傳依賴如下jar包 commons-fileupload-x.x.x.jar commons-io-x.x.x.jar 檔案上傳大致步驟: 編寫頁面 配置struts.xml 攔截器會自動接收上傳的檔

SpringBoot下檔案下載實現

本文歡迎轉載,轉載請註明出處,謝謝~(作者:喝酒不騎馬 Colton_Null) from CSDN SpringBoot後臺如何實現檔案上傳下載? 最近做的一個專案涉及到檔案上傳與下載。前端上傳採用百度webUploader外掛。有關該外掛的

檔案下載的功能實現

檔案上傳 檔案上傳原理分析 1、檔案上傳的必要前提: 一、進行檔案上傳時只能使用post方式提交表單 二、表單必須新增一個屬性:enctype=”multipart/form-data” 三、用於上傳檔案的元素必須時 2、enctype屬性 作

基於tobato的fastdfsspring boot整合實現檔案下載

專案結構: pom.xml檔案新增配置: <!-- fastdfs --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastd

基於js-ipfs-api實現ipfs的檔案下載

配置本地的ipfs節點 # 初始化ipfs節點 ipfs init # 執行ipfs節點 ipfs daemon 使用js-ipfs-api呼叫ipfs服務 連線本地ipfs節點 const ipfsAPI = require('ip