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

首頁 > 學院 > 開發設計 > 正文

struts文件上傳

2019-11-15 00:39:32
字體:
來源:轉載
供稿:網友
struts文件上傳

  最近項目中使用到文件上傳的例子,用到struts中的文件上傳及ftp簡單總結下:

  1.struts文件上傳

  2.ftp服務器搭建

  3.struts上傳文件到ftp組件

  1.struts文件

   struts文件上傳相對比較簡單,由于struts對文件上傳進行了封裝,上篇文章中說到的struts中的文件上傳攔截器進行的處理,具體邏輯代碼如下:

 1 public String intercept(ActionInvocation invocation) throws Exception { 2     ActionContext ac = invocation.getInvocationContext(); 3  4     HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST); 5  6     if (!(request instanceof MultipartRequestWrapper)) { 7         if (LOG.isDebugEnabled()) { 8             ActionPRoxy proxy = invocation.getProxy(); 9             LOG.debug(getTextMessage("struts.messages.bypass.request", new String[]{proxy.getNamespace(), proxy.getActionName()}));10         }11 12         return invocation.invoke();13     }14 15     ValidationAware validation = null;16 17     Object action = invocation.getAction();18 19     if (action instanceof ValidationAware) {20         validation = (ValidationAware) action;21     }22 23     MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;24 25     if (multiWrapper.hasErrors()) {26         for (String error : multiWrapper.getErrors()) {27             if (validation != null) {28                 validation.addActionError(error);29             }30         }31     }32 33     // bind allowed Files===核心處理代碼邏輯34     //大體邏輯35     //循環遍歷前臺input標簽定義的name列表,每個name對應一個文件列表,遍歷文件列表獲取文件類型及文件內容36     Enumeration fileParameterNames = multiWrapper.getFileParameterNames();37     while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {38         // get the value of this input tag獲取前臺定義的name屬性39         String inputName = (String) fileParameterNames.nextElement();40 41         // get the content type==獲取文件類型42         String[] contentType = multiWrapper.getContentTypes(inputName);43 44         if (isNonEmpty(contentType)) {45             // get the name of the file from the input tag==獲取文件名46             String[] fileName = multiWrapper.getFileNames(inputName);47 48             if (isNonEmpty(fileName)) {49                 // get a File object for the uploaded File50                 File[] files = multiWrapper.getFiles(inputName);51                 if (files != null && files.length > 0) {52                     List<File> acceptedFiles = new ArrayList<File>(files.length);53                     List<String> acceptedContentTypes = new ArrayList<String>(files.length);54                     List<String> acceptedFileNames = new ArrayList<String>(files.length);55                     String contentTypeName = inputName + "ContentType";56                     String fileNameName = inputName + "FileName";57 58                     for (int index = 0; index < files.length; index++) {59                         if (acceptFile(action, files[index], fileName[index], contentType[index], inputName, validation)) {60                             acceptedFiles.add(files[index]);61                             acceptedContentTypes.add(contentType[index]);62                             acceptedFileNames.add(fileName[index]);63                         }64                     }65 66                     if (!acceptedFiles.isEmpty()) {67                         Map<String, Object> params = ac.getParameters();68 //文件列表69                         params.put(inputName, acceptedFiles.toArray(new File[acceptedFiles.size()]));70 //文件類型名稱列表71                         params.put(contentTypeName, acceptedContentTypes.toArray(new String[acceptedContentTypes.size()]));72 //文件名稱列表73                         params.put(fileNameName, acceptedFileNames.toArray(new String[acceptedFileNames.size()]));74                     }75                 }76             } else {77                 if (LOG.isWarnEnabled()) {78                     LOG.warn(getTextMessage(action, "struts.messages.invalid.file", new String[]{inputName}));79                 }80             }81         } else {82             if (LOG.isWarnEnabled()) {83                 LOG.warn(getTextMessage(action, "struts.messages.invalid.content.type", new String[]{inputName}));84             }85         }86     }87 88     // invoke action89     return invocation.invoke();90 }

  通過研究上面的代碼可以明白文件上傳的使用方法,比如下面頁面:

  前臺頁面代碼如下

 1 <div> 2     <label>附件上傳1</label> 3     <input name="file" type="file"> 4     <input name="file" type="file"> 5 </div> 6 <div> 7     <label>附件上傳2</label> 8     <input name="test" type="file"> 9     <input name="test" type="file">10 </div>

  對于這樣的前臺定義,后臺action中應該進行如下想關屬性的配置

//對應前臺頁面中的name=“file”的一組定義private List<File> file;private List<String> fileContentType;private List<String> fileFileName;public List<File> getFile() {    return file;}public void setFile(List<File> file) {    this.file = file;}public List<String> getFileContentType() {    return fileContentType;}public void setFileContentType(List<String> fileContentType) {    this.fileContentType = fileContentType;}public List<String> getFileFileName() {    return fileFileName;}public void setFileFileName(List<String> fileFileName) {    this.fileFileName = fileFileName;}
 1 //對應前臺name為test的屬性文件列表 2 private List<File> test; 3 private List<String> testContentType; 4 private List<String> testFileName; 5 public List<File> getTest() { 6     return test; 7 } 8  9 public void setTest(List<File> test) {10     this.test = test;11 }12 13 public List<String> getTestContentType() {14     return testContentType;15 }16 17 public void setTestContentType(List<String> testContentType) {18     this.testContentType = testContentType;19 }20 21 public List<String> getTestFileName() {22     return testFileName;23 }24 25 public void setTestFileName(List<String> testFileName) {26     this.testFileName = testFileName;27 }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
原创国产精品91| 亚洲国产成人在线视频| 成人激情综合网| 亚洲成人黄色网| 欧美做受高潮电影o| 日本中文字幕成人| 亚洲视频在线视频| www.久久久久久.com| 欧美精品一区二区三区国产精品| 91九色视频在线| 日韩免费观看av| 国产精品亚洲欧美导航| 在线a欧美视频| 热门国产精品亚洲第一区在线| 欧美国产日韩一区二区| 色综合久综合久久综合久鬼88| 日韩欧美一区二区三区| 亚洲色图欧美制服丝袜另类第一页| 一区二区福利视频| 亚洲成人免费网站| 91在线观看免费高清| 欧美诱惑福利视频| 欧美大码xxxx| 国产午夜精品理论片a级探花| 色噜噜狠狠狠综合曰曰曰| 1769国内精品视频在线播放| 日韩在线精品一区| 国产亚洲激情视频在线| 色妞欧美日韩在线| 国产精品日韩欧美大师| 亚洲国产女人aaa毛片在线| 国产视频在线观看一区二区| 茄子视频成人在线| 97婷婷涩涩精品一区| 国产一区二区日韩精品欧美精品| 深夜福利国产精品| 亚洲久久久久久久久久久| 亚洲网站视频福利| 福利视频导航一区| 日韩视频在线免费观看| 国产欧美精品一区二区| 亚洲人成啪啪网站| 亚洲日本中文字幕| 国产精品久久久久久久久久| 日韩在线视频免费观看高清中文| 亚洲激情中文字幕| 成人日韩在线电影| 97人洗澡人人免费公开视频碰碰碰| 久久天天躁狠狠躁老女人| 国产精品日韩欧美综合| 奇米四色中文综合久久| 韩国精品久久久999| 久久手机免费视频| 成人美女免费网站视频| 欧美激情一级二级| 日韩中文字幕在线精品| 亚洲美女在线视频| 日韩欧美一区二区在线| 国产精品一区二区电影| 亚洲精品电影在线| 亚洲欧美日韩中文视频| 91久久夜色精品国产网站| 久久中文字幕在线视频| 中文一区二区视频| 亚洲美女精品成人在线视频| 亚洲黄色www网站| 亚洲色图17p| 欧美日韩在线免费| 亚洲色图35p| 日本中文字幕成人| 亚洲理论电影网| 96国产粉嫩美女| 中日韩美女免费视频网站在线观看| 日韩视频免费看| 最近2019中文免费高清视频观看www99| 庆余年2免费日韩剧观看大牛| 国模吧一区二区三区| 91黑丝高跟在线| 精品在线欧美视频| 欧美精品在线看| 久色乳综合思思在线视频| 日韩精品福利网站| 欧美xxxx做受欧美| 久久久极品av| 亚洲一区二区三区四区视频| 97精品视频在线播放| 国产欧美日韩最新| 美女久久久久久久久久久| 国产成人综合一区二区三区| 亚洲片在线资源| 国产精品视频中文字幕91| 久久国内精品一国内精品| 91精品啪在线观看麻豆免费| 伊人久久五月天| 国产做受高潮69| 精品亚洲aⅴ在线观看| 91精品国产高清久久久久久91| 亚洲色图美腿丝袜| 欧美日韩国产中文字幕| 欧美激情精品久久久久久久变态| 91中文精品字幕在线视频| 欧美亚洲第一页| 亚洲tv在线观看| 2019中文字幕在线观看| 久久中国妇女中文字幕| 免费97视频在线精品国自产拍| 亚洲色图av在线| 性欧美在线看片a免费观看| 久精品免费视频| 日韩视频亚洲视频| 九九久久国产精品| 欧美成人午夜激情视频| 日本最新高清不卡中文字幕| 国产不卡精品视男人的天堂| 欧美日韩国产中文字幕| 97成人超碰免| 日韩精品在线观看一区| 亚洲天堂免费观看| 亚洲国产精品成人一区二区| 国产精品吹潮在线观看| 亚洲福利在线观看| 91av在线视频观看| 一区二区国产精品视频| 成人午夜两性视频| 国产精品v片在线观看不卡| 精品中文字幕在线观看| 成人h片在线播放免费网站| 日韩免费中文字幕| 91视频88av| 亚洲福利小视频| 亚洲va欧美va国产综合久久| 国产精品入口尤物| 一区二区中文字幕| 国产一区二中文字幕在线看| 色综合久久精品亚洲国产| 2023亚洲男人天堂| 久久综合五月天| 日本国产欧美一区二区三区| 国产亚洲精品久久久久久牛牛| 精品视频在线播放免| 亚洲视频电影图片偷拍一区| 欧美电影免费观看电视剧大全| 亚洲国产日韩精品在线| 美女性感视频久久久| 日本中文字幕不卡免费| 久久久精品日本| 久久国产精品视频| 国产精品免费视频久久久| 欧洲永久精品大片ww免费漫画| 97视频在线播放| 国产精品久久久久久av福利软件| 欧美成aaa人片在线观看蜜臀| 一本一本久久a久久精品综合小说| 日韩精品在线观看视频| 亚洲一区二区黄| 久久天天躁狠狠躁夜夜躁2014| 日韩精品在线第一页| 色妞色视频一区二区三区四区| 欧美大秀在线观看| 欧美专区在线播放| 国产97色在线|日韩| 国产成人短视频| 国产精品视频久久久| 久久亚洲私人国产精品va|