欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Struts2實(shí)現(xiàn)文件上傳功能

 更新時(shí)間:2018年01月26日 14:18:18   作者:蚊蚊蚊蚊蚊170624  
這篇文章主要為大家詳細(xì)介紹了Struts2實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Servlet 3.0規(guī)范的HttpServletRequest已經(jīng)提供了方法來處理文件上傳但這種上傳需要在Servlet中完成。而Struts2則提供了更簡(jiǎn)單的封裝。

Struts2默認(rèn)使用的是Jakarta的Common-FileUpload的文件上傳框架,因此使用Struts2的文件上傳功能,則需要添加兩個(gè)jar包,即commons-io-2.2.jar和commons-fileupload-1.3.1.jar。 

Struts2簡(jiǎn)單文件上傳示例:

1.文件上傳頁(yè)面

  為了能上傳文件,表單的method必須設(shè)置為POST,并且enctype設(shè)置為multipart/form-data。一旦設(shè)置了enctype為multipart/form-data,此時(shí)瀏覽器將會(huì)采用二進(jìn)制流的方式來處理表單數(shù)據(jù)。

<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
 Created by IntelliJ IDEA.
 User: Administrator
 Date: 2018/1/16
 Time: 14:06
 To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>Struts2 簡(jiǎn)單文件上傳</title>
</head>
<body>
 <s:form action="file_upload" method="POST" enctype="multipart/form-data">
 <s:file name="upload" label="選擇文件"/>
 <s:submit value="上傳"/>
 </s:form>
</body>
</html>

2.處理上傳請(qǐng)求的Action

/**
 * Description:Struts2簡(jiǎn)單文件上傳
 * Author: Eleven
 * Date: 2018/1/24 10:39
 */
public class FileAction extends ActionSupport{

 //上傳文件
 private File upload;
 //上傳文件類型
 private String uploadContentType;
 //上傳文件名
 private String uploadFileName;

 //文件上傳允許的類型在struts.xml中使用param標(biāo)簽動(dòng)態(tài)設(shè)置了
 private String allowTypes;

 public String page(){
 return "page";
 }

 public void upload() {

 //文件上傳:
 //1.讀取文件內(nèi)容
 //2.將文件內(nèi)容寫到指定文件
 try{
  System.out.println("文件上傳允許的類型="+allowTypes);
  String realPath = ServletActionContext.getServletContext().getRealPath("/upload");
  System.out.println("項(xiàng)目的絕對(duì)路徑="+realPath);
  //創(chuàng)建文件保存目錄
  new File(realPath).mkdir();
  File file = new File(realPath+"/"+uploadFileName);
  //文件不存在則創(chuàng)建
  if(!file.exists()){
  file.createNewFile();
  }
  FileOutputStream out = new FileOutputStream(file);
  FileInputStream in = new FileInputStream(upload);
  byte[] buffer = new byte[1024];
  int len = 0;
  //邊讀邊寫 每次讀取1kb 寫1kb
  while((len = in.read(buffer))>0){
  out.write(buffer,0,len);
  }
  System.out.println("文件上傳成功...");
 }catch(Exception e){
  e.printStackTrace();
 }

 }

 public File getUpload() {
 return upload;
 }

 public void setUpload(File upload) {
 this.upload = upload;
 }

 public String getUploadContentType() {
 return uploadContentType;
 }

 public void setUploadContentType(String uploadContentType) {
 this.uploadContentType = uploadContentType;
 }

 public String getUploadFileName() {
 return uploadFileName;
 }

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

 public String getAllowTypes() {
 return allowTypes;
 }

 public void setAllowTypes(String allowTypes) {
 this.allowTypes = allowTypes;
 }
}

如果表單中包含一個(gè)name屬性為xxx的文件域,則對(duì)應(yīng)的Action中需要使用三個(gè)成員變量來封裝該文件域的信息。

  類型為File的xxx成員變量封裝了該文件域?qū)?yīng)的文件內(nèi)容。

  類型為String的xxxFileName成員變量封裝了該文件域?qū)?yīng)的文件的文件名。

  類型為String的xxxContentType成員變量封裝了該文件域?qū)?yīng)的文件的文件類型。

3.配置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.enable.DynamicMethodInvocation" value="false" />
 <constant name="struts.devMode" value="true" />

 <package name="default" namespace="/" extends="struts-default">

 <!--文件上傳-->
 <action name="file_*" class="eleven.action.FileAction" method="{1}">
  <result name="page">/WEB-INF/jsp/fileUpload.jsp</result>
  <!--動(dòng)態(tài)設(shè)置action的屬性,這里舉例設(shè)置了允許文件上傳的類型,但是action程序中并未做過多的處理-->
  <param name="allowTypes">image/png,image/gif,image/jpeg</param>
 </action>

 </package>

</struts>

攔截器實(shí)現(xiàn)文件過濾  

  Struts2提供了一個(gè)文件上傳的攔截器,fileUpload,為了讓該攔截器起作用,要在action中配置攔截器引用。

  配置fileUpload攔截器時(shí),可以為其指定兩個(gè)參數(shù):

    allowTypes:允許上傳的文件類型,多個(gè)文件類型之間用英文逗號(hào),隔開

    maximumSize:允許上傳的文件大小,單位是字節(jié)。

  當(dāng)文件過濾失敗后,系統(tǒng)自動(dòng)轉(zhuǎn)入input邏輯視圖,因此必須為該Action配置名為input的邏輯視圖。除此之外,還必須顯示地為該Action配置defaultStack的攔截器引用。

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.enable.DynamicMethodInvocation" value="false" />
 <constant name="struts.devMode" value="true" />

 <package name="default" namespace="/" extends="struts-default">

 <!--文件上傳-->
 <action name="file_*" class="eleven.action.FileAction" method="{1}">
  <!--配置fileUpload攔截器 且配置在defaultStack攔截器棧之前-->
  <interceptor-ref name="fileUpload">
  <!--允許上傳的文件類型-->
  <param name="allowedTypes">image/png,image/gif,image/jpeg</param>
  <!--允許上傳文件大小-->
  <param name="maximumSize">2000</param>
  </interceptor-ref>
  <!--配置系統(tǒng)默認(rèn)攔截器-->
  <interceptor-ref name="defaultStack"/>
  <!--配置input視圖頁(yè)面-->
  <result name="input">/WEB-INF/jsp/input.jsp</result>

  <result name="page">/WEB-INF/jsp/fileUpload.jsp</result>
 </action>

 </package>

</struts>

  上面配置的文件上傳的攔截器,要求文件上傳的類型只能是圖片文件,并且文件大小不能大于2000字節(jié),如果上傳文件太大,或者類型不符合,則將跳轉(zhuǎn)到input邏輯視圖。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 爬蟲服務(wù)器被屏蔽的解決方案

    Java 爬蟲服務(wù)器被屏蔽的解決方案

    這篇文章主要介紹了Java 爬蟲服務(wù)器被屏蔽的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 圖文詳解mybatis+postgresql平臺(tái)搭建步驟

    圖文詳解mybatis+postgresql平臺(tái)搭建步驟

    從頭開始搭建一個(gè)mybatis+postgresql平臺(tái),這篇文章主要介紹了圖文詳解mybatis+postgresql平臺(tái)搭建步驟,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實(shí)例解析

    Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實(shí)例解析

    這篇文章主要介紹了Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringAop自定義切面注解、自定義過濾器及ThreadLocal詳解

    SpringAop自定義切面注解、自定義過濾器及ThreadLocal詳解

    這篇文章主要介紹了SpringAop自定義切面注解、自定義過濾器及ThreadLocal詳解,Aspect(切面)通常是一個(gè)類,里面可以定義切入點(diǎn)和通知(切面 = 切點(diǎn)+通知),execution()是最常用的切點(diǎn)函數(shù),需要的朋友可以參考下
    2024-01-01
  • JavaIO模型中的BIO,NIO和AIO詳解

    JavaIO模型中的BIO,NIO和AIO詳解

    這篇文章主要為大家詳細(xì)介紹了JavaIO模型中的BIO,NIO和AIO,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java實(shí)現(xiàn)XML文件學(xué)生通訊錄

    Java實(shí)現(xiàn)XML文件學(xué)生通訊錄

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)XML文件學(xué)生通訊錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 一文帶你看懂Java8中的lambda表達(dá)式和方法引用

    一文帶你看懂Java8中的lambda表達(dá)式和方法引用

    Lambda 表達(dá)式是 Java 8 引入的一項(xiàng)重要特性,它提供了一種簡(jiǎn)潔、清晰且靈活的語(yǔ)法來表示可傳遞的匿名函數(shù),下面就跟隨小編一起學(xué)習(xí)一下Java8中的lambda表達(dá)式和方法引用的相關(guān)知識(shí)吧
    2023-12-12
  • java.util.Date與java.sql.Date的區(qū)別

    java.util.Date與java.sql.Date的區(qū)別

    這篇文章主要介紹了java.util.Date與java.sql.Date的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • java線程之死鎖

    java線程之死鎖

    這篇文章主要介紹了Java線程之死鎖,死鎖是這樣一種情形-多個(gè)線程同時(shí)被阻塞,它們中的一個(gè)或者全部都在等待某個(gè)資源被釋放。由于線程被無限期地阻塞,因此程序不可能正常終止
    2022-05-05
  • SpringBoot集成Spring security JWT實(shí)現(xiàn)接口權(quán)限認(rèn)證

    SpringBoot集成Spring security JWT實(shí)現(xiàn)接口權(quán)限認(rèn)證

    這篇文章主要介紹了SpringBoot集成Spring security JWT實(shí)現(xiàn)接口權(quán)限認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論