亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java中Struts2文件上傳問題詳解

2019-11-26 15:07:04
字體:
來源:轉載
供稿:網友

首先是網頁部分,upload_file.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML><html><head><title>Upload File</title></head><body>  <form action="UploadFile" method="post" enctype="multipart/form-data">    <!--文件域-->    <input type="file" name="source" /> <input type="submit" value="上傳">  </form></body></html>

上傳文件的表單,metho必須設置成post,enctype必須設置成multipart/form-data。

從上面代碼中可以看到這個表單提交給了UploadFile這個action來處理,那我們在struts.xml里面配置如下:

<action name="UploadFile" class="com.lidi.action.UploadAction">  <result name="success">/uploadResult.jsp</result>  <!--fileUpload攔截器,可用于限制上傳文檔的類型和文檔大小 -->  <interceptor-ref name="fileUpload">  <!-- 限制文件大小20M,單位為字節 -->    <param name="maximumSize">20971520</param>  </interceptor-ref>  <!--默認攔截器,必須聲明在fileUpload攔截器之后 -->  <interceptor-ref name="defaultStack" /> </action>

fileUpload攔截器,用于設置上傳路徑,限制文件類型和大小。

關于限制文件大小,光有<param name="maximumSize">是不行的,還必須在<struts>標簽下添加

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

這行代碼表示整個項目所有要上傳文件的地方允許上傳的文件大小的最大值,也就是說這個項目里上傳的任何單個文件大小不能超過21000000字節(約20M),如果項目中不添加這行代碼,則默認允許上傳的文件大小最大為2M,所以這也是突破struts2只能上傳2M文件的限制的方法。

關于限制文件類型,如果需要限制為圖片文件,則<interceptor>可以這樣配置

<!-- 設置只允許上傳圖片文件 --><intercepter-ref name="fileUpload">  <param name="allowedTypes">image/bmp, image/x-png, image/gif, image/jpeg</param></intercepter-ref><interceptor-ref name="defaultStack" />

<param name="allowedTypes">標簽中的值都是文件的MIME類型,常用文件的MIME類型可以在%TOMCAT_HOME%/conf/web.xml中找到。

如果要限制為word文件,則可以<interceptor>可以這樣配置

<!-- 設置只允許上傳word文檔 --><intercepter-ref name="fileUpload">  <param name="allowedTypes">application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document</param></intercepter-ref><interceptor-ref name="defaultStack" />

然而我感覺這樣來限制文件類型,不如用javascript在前端實現限制。

接下來寫UploadAction,UploadAction必需的私有屬性是source,這是和upload_file.jsp里面文件域的name屬性是一致,就是說文件域的name屬性值為source,則UploadAction中必需有私有屬性source,另外,還有兩個比較重要的私有屬性:

private String sourceFileName; //待上傳文件的文件名
private String sourceContentType; //待上傳文件的文件類型
這兩個變量名的格式就是前面的前綴source和upload_file.jsp中的文件域的name屬性相同。

綜合來說,就是,比如upload_file.jsp中文件域的name = “abc”,則Action中就需要這樣定義

private File abc;private String abcFileName;private String abcContentType; 

abc會自動獲取要上傳的文件對象,abcFileName自動獲取文件名,abcContentType自動獲取文件類型。

關于上傳路徑,是我要重點說一下的。

如果是上傳到絕對路徑,那還挺好搞的,但如果要上傳到項目根目錄下的upload文件夾呢,怎么獲得這個upload文件夾的完整路徑?

我嘗試過使用

ServletActionContext.getServletContext().getRealPath("/upload");
但返回了null。也用過

ServletActionContext.getRequest().getRealPath("/upload");
還是返回了null。但在網上查下這個問題,很多人都推薦這么寫,證明可能某些情況下這樣寫確實是可行的,但也有跟我一樣返回null的人,他們同時推薦了一種新的方法,就是讓UploadAction實現ServletContextAware接口。具體做法如下:

public class UploadAction extends ActionSupport implements ServletContextAware {  /**   * 省略其它代碼...   */  private ServletContext context;   public ServletContext getContext() {    return context;  }  public void setContext(ServletContext context) {    this.context = context;  }    @Override  public void setServletContext(ServletContext context) {    this.context = context;  }}

然后使用

String path = context.getRealPath("/upload");// 重要:斜杠不能少

獲得upload文件夾的路徑。然后執行上傳:

/*將文件上傳到upload文件夾下*/File savefile = new File(path, sourceFileName);FileUtils.copyFile(source, savefile);

我個人是比較推薦這種方法的,因為這種方法好像規避了當項目被打包轉移到其它環境時也能保證獲得正確的路徑。

后面貼上UploadAction的完整代碼UploadAction.java

package com.lidi.action;import java.io.File;import java.io.IOException;import javax.servlet.ServletContext;import org.apache.commons.io.FileUtils;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport implements ServletContextAware {  /**   *    */  private static final long serialVersionUID = 1L;  private File source;// 待上傳文件  private String sourceFileName;// 待上傳文件的文件名  private String sourceContentType; // 待上傳文件的文件類型  private ServletContext context; // 重要  /* 重要 */  public ServletContext getContext() {    return context;  }  public void setContext(ServletContext context) {    this.context = context;  }  /* getters & setters */  public File getSource() {    return source;  }  public void setSource(File source) {    this.source = source;  }  public String getSourceFileName() {    return sourceFileName;  }  public void setSourceFileName(String sourceFileName) {    this.sourceFileName = sourceFileName;  }  public String getSourceContentType() {    return sourceContentType;  }  public void setSourceContentType(String sourceContentType) {    this.sourceContentType = sourceContentType;  }   @Override  public void setServletContext(ServletContext context) {    this.context = context;  }  public String execute() throws IOException {    /*獲取存放上傳文件的路徑:項目根目錄upload文件夾*/    String path;    path = context.getRealPath("/upload");// 重要:斜杠不能少    System.out.println(path);        /*將文件上傳到upload文件夾下*/    File savefile = new File(path, sourceFileName);    FileUtils.copyFile(source, savefile);    System.out.println(savefile.getAbsolutePath());    return SUCCESS;  }}

上傳結果頁uploadResult.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML><html> <head>    <title>Upload Result</title> </head> <body> <p>文件名:<s:property value="sourceFileName" /></p> <p>文件類型:<s:property value="sourceContentType" /></p> <p>文件:<a href="upload/<s:property value="sourceFileName" />"><s:property value="sourceFileName" /></a></p> </body></html>

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
岛国av一区二区| 欧美精品免费在线| 在线观看日韩www视频免费| 国产91精品不卡视频| 国产精品永久免费观看| 26uuu久久噜噜噜噜| 亚洲国模精品一区| 91成人免费观看网站| 亚洲成色999久久网站| 欧美激情一级二级| 日韩精品在线免费观看| 日韩一区二区福利| 国产成人一区二区三区小说| 亚洲va欧美va国产综合剧情| 精品免费在线视频| 成人av.网址在线网站| 久久久精品免费| 日本久久久久久久久| 97视频在线观看成人| 91日本视频在线| 亚洲午夜精品久久久久久性色| 日韩高清电影免费观看完整版| 日韩经典中文字幕在线观看| 中文在线不卡视频| 一本色道久久综合狠狠躁篇怎么玩| 欧日韩不卡在线视频| 77777少妇光屁股久久一区| 97视频在线观看播放| 亚洲自拍av在线| 蜜月aⅴ免费一区二区三区| 日韩一中文字幕| 国产精品视频色| 久久这里只有精品99| 美女少妇精品视频| 日韩一区二区三区xxxx| 成人免费大片黄在线播放| 亚洲国产另类久久精品| 亚洲欧洲偷拍精品| 欧美另类精品xxxx孕妇| 国产不卡视频在线| 中文字幕亚洲综合久久| 成人xxxx视频| 国产日本欧美一区二区三区在线| 国产免费久久av| 久久久久久亚洲| 国产91久久婷婷一区二区| 国产精品成人aaaaa网站| 国模精品一区二区三区色天香| 国产亚洲精品高潮| 亚洲精品国精品久久99热一| 久久久精品影院| 欧美日韩在线观看视频小说| 日韩电影免费在线观看中文字幕| 成人午夜黄色影院| 久久久999精品免费| 欧美亚洲另类激情另类| 91精品国产沙发| 麻豆成人在线看| 久久99久久久久久久噜噜| 亚洲国产成人久久综合一区| 91精品国产沙发| 日韩电视剧在线观看免费网站| 91精品国产综合久久久久久蜜臀| 综合激情国产一区| 26uuu另类亚洲欧美日本老年| 精品视频中文字幕| 日本不卡视频在线播放| 久久久久北条麻妃免费看| 精品美女久久久久久免费| 成人精品网站在线观看| 亚洲社区在线观看| 欧美小视频在线观看| 久久精品国产99国产精品澳门| 91av在线网站| 九九热99久久久国产盗摄| 成人福利在线视频| 欧美成人免费大片| 欧美日韩国产一区二区三区| 亚洲午夜国产成人av电影男同| 国产成人精品一区二区| 国产精品一区二区三区久久| 国产精品香蕉在线观看| 久久久久久久国产| 欧美亚洲另类在线| 日韩av在线免费播放| 亚洲老头同性xxxxx| 国产精品免费一区二区三区都可以| 国产主播精品在线| 欧美一级片在线播放| 精品露脸国产偷人在视频| 久久精品国产一区二区三区| 91久久综合亚洲鲁鲁五月天| 国产成人免费91av在线| 欧美一区深夜视频| 国产成人avxxxxx在线看| 国产不卡在线观看| 国自产精品手机在线观看视频| 久久综合国产精品台湾中文娱乐网| 久热99视频在线观看| 亚洲一区中文字幕| 国产精品xxx视频| 91精品国产综合久久香蕉的用户体验| 欧美日韩在线视频首页| 久久这里有精品| 亚洲一区二区三区四区视频| www欧美xxxx| 色悠久久久久综合先锋影音下载| 精品久久久久人成| 欧美电影在线观看网站| 亚洲精品视频网上网址在线观看| 亚洲一区国产精品| 国产一区深夜福利| 91精品国产色综合久久不卡98| 一区二区成人av| 亚洲国产精品久久久| 国产精品一区二区三区免费视频| 欧美日韩加勒比精品一区| 国产亚洲激情视频在线| 欧美自拍大量在线观看| 黄色91在线观看| 日韩最新中文字幕电影免费看| 午夜美女久久久久爽久久| 久久精品国产亚洲| 亚洲第一福利在线观看| 91中文字幕一区| 亚洲桃花岛网站| 久久久亚洲福利精品午夜| 中文字幕九色91在线| 欧美成人精品一区二区三区| 久久久久久久久久久av| 亚洲影视中文字幕| 亚洲激情电影中文字幕| 日本成熟性欧美| 日韩成人久久久| 超薄丝袜一区二区| 成人乱人伦精品视频在线观看| 亚洲精品国产免费| 中国日韩欧美久久久久久久久| 成人h片在线播放免费网站| 91精品国产777在线观看| 色999日韩欧美国产| 91po在线观看91精品国产性色| 欧美午夜久久久| 色悠悠国产精品| 性亚洲最疯狂xxxx高清| 2019亚洲日韩新视频| www.日韩.com| 国产激情999| 欧美第一淫aaasss性| 久久精品国产v日韩v亚洲| 亚洲xxx自由成熟| 亚洲欧美中文字幕在线一区| 亚洲天堂开心观看| 久久久久久久色| 亚洲在线视频福利| 久久国产精品久久久| 久久久成人的性感天堂| 久久精品国产欧美亚洲人人爽| 自拍偷拍亚洲精品| 欧美综合第一页| 成人午夜高潮视频| 国产啪精品视频| 91影院在线免费观看视频| 亚洲精品视频免费|