精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

WebWork文件上傳問題解析

開發 后端
本文向您介紹作者在進行WebWork文件上傳時遇到的問題和解決方法。WebWork上傳文件是兩次拷貝過程,首先從request的輸入流中將文件流輸出到一個臨時文件,然后你再將此臨時文件拷貝到你需要指定的路徑。

今天遇到一個webwork文件上傳的問題,上傳 txt 文件的時候,如果文件內容為空,則上傳后的文件為null,上傳不成功。試了一下,如果給txt文件寫一個二進制的0x00字符,即可以上傳成功,如果是上傳一個沒有內容的word文檔,也可以成功,分析原因應該是word格式自帶了很多隱藏格式數據,所以其實沒有文字內容的word文檔也是有東西的。這樣看來,只要文件實際內容為空,即不帶任何字符,上傳就有問題。

隨后,我查看了一下webwork.properties文件,發現我們項目的webwork.multipart.parser選用的是jakarta,

于是我依次換用了另外兩種parser:pell和cos。最后發現,只有cos不會出錯,能夠上傳成功??磥恚蔷唧wparser對上傳文件流的解析不一樣。

三種parser都是市面上早已存在的,webwork只不過是對它們進行了封裝調用,并不是靠自己來實現的。webwork提供了一個通用的訪問接口MultiPartRequest,然后針對三種parser,分別繼承實現了CosMultiPartRequest、PellMultiPartRequest、JakartaMultiPartRequest。默認情況下,如果你不在webwork.properties文件中設置parser,webwork會選擇pell作為parser。

三種parser的區別是:只有Jakarta能做多文件的同時上傳;

只有pell能自動支持中文名文件的上傳,其他兩種需要你自己手動做encoding;cos功能比較強大,比如我上面提到的txt文件內容為空,cos可以上傳成功,但其他兩種parser就不行,不過webwork的封裝使它喪失了很多功能。

另外,webwork.properties文件里還有其他幾個與文件上傳相關的參數,比如webwork.multipart.saveDir用于設定上傳文件的臨時文件保存目錄,webwork.multipart.maxSize用于設置上傳文件的最大字節數。

我又上網找了一篇文章,深入介紹了WebWork文件上傳的機制和過程,還找了一篇剖析webwork源碼的pdf《Anatomy Webwork Source Code》,大家可以去下載看看 http://public.iecn.net/Along/Anatomy%20Webwork%20Source%20Code_V0.9.pdf

那篇深入介紹Webwork文件上傳機制的文章(http://www.wangchao.net.cn/bbsdetail_267965.html)如下:

點擊上傳按鈕后,webwork的程序流如下:

  1. step1)進入ServletDispatcher.service  
  2. publicvoidservice  
  3. (HttpServletRequestrequest,HttpServletResponseresponse)  
  4. throwsServletException{  
  5. ........  
  6. request=wrapRequest(request);  
  7. .........  
  8. }  
  9. step2)進入ServletDispatcher.wrapRequest  
  10. protectedHttpServletRequestwrapRequest  
  11. (HttpServletRequestrequest)throwsIOException{  
  12. ........................  
  13. if(MultiPartRequest.isMultiPart(request)){  
  14. request=newMultiPartRequestWrapper  
  15. (request,getSaveDir(),getMaxSize());  
  16. }  
  17. returnrequest;  
  18. }  
  19. step3)進入MultiPartRequestWrapper的構造方法  
  20. publicMultiPartRequestWrapper  
  21. (HttpServletRequestrequest,StringsaveDir,intmaxSize)  
  22. throwsIOException{  
  23. .....................  
  24. //step3.1)獲取webwork.preperties配置的parser  
  25. Stringparser="";  
  26. parser=Configuration.getString("webwork.multipart.parser");  
  27. //Ifit'snotset,usePell  
  28. if(parser.equals("")){  
  29. log.warn("Propertywebwork.multipart.parsernotset."+  
  30. "Usingcom.opensymphony.webwork.dispatcher.multipart.  
  31. PellMultiPartRequest");  
  32. parser="com.opensymphony.webwork.dispatcher.  
  33. multipart.PellMultiPartRequest";  
  34. }  
  35. //legacysupportforoldstylepropertyvalues  
  36. elseif(parser.equals("pell")){  
  37. parser="com.opensymphony.webwork.dispatcher.  
  38. multipart.PellMultiPartRequest";  
  39. }elseif(parser.equals("cos")){  
  40. parser="com.opensymphony.webwork.dispatcher.  
  41. multipart.CosMultiPartRequest";  
  42. }elseif(parser.equals("jakarta")){  
  43. parser="com.opensymphony.webwork.dispatcher.  
  44. multipart.JakartaMultiPartRequest";  
  45. }  
  46. //step3.2)獲取后通過反射實例化parser  
  47. try{  
  48. ClassbaseClazz=com.opensymphony.webwork.dispatcher.  
  49. multipart.MultiPartRequest.class;  
  50. Classclazz=Class.forName(parser);  
  51. //makesureitextendsMultiPartRequest  
  52. if(!baseClazz.isAssignableFrom(clazz)){  
  53. addError("Class'"+parser+"'doesnotextendMultiPartRequest");  
  54. return;  
  55. }  
  56. //gettheconstructor  
  57. Constructorctor=clazz.getDeclaredConstructor(newClass[]{  
  58. Class.forName("javax.servlet.http.HttpServletRequest"),  
  59. java.lang.String.class,int.class  
  60. });  
  61. //buildtheparameterlist  
  62. Object[]parms=newObject[]{  
  63. request,saveDir,newInteger(maxSize)  
  64. };  
  65. //instantiateit  
  66. multi=(MultiPartRequest)ctor.newInstance(parms);  
  67. .................................................  
  68. }  

//step4 進入JakartaMultiPartRequest的構造方法(我在webwork配置的parser是Jakarta所以進入了這個方法,如果你配置不同的parser回進入不同的parser

  1. public JakartaMultiPartRequest  
  2. (HttpServletRequest servletRequest,   
  3. String saveDir, int maxSize)  
  4. throws IOException {  
  5. //設置保存參數  
  6. DiskFileUpload upload = new DiskFileUpload();  
  7. // we must store all uploads on disk because   
  8. the ww multipart API is missing streaming  
  9. // capabilities  
  10. upload.setSizeThreshold(0);  
  11. upload.setSizeMax(maxSize);  
  12. if (saveDir != null) {  
  13. upload.setRepositoryPath(saveDir);  
  14. }  
  15. // Parse the request  
  16. try {  

//此方法生成文件,將請求中的每個參數都生成一個臨時文件比如upload_00000017.tmp, upload_00000018.tmp等,就算是form提交的參數也如此

  1. List items = upload.parseRequest(servletRequest);  
  2. ......................  
  3. }  

執行完第四步,然后推出ServletDispatcher.wrapRequest,進入serviceAction方法,開始action及其攔截器的棧調用

進入action和調用棧后,攔截器或action可通過如下代碼訪問上傳的臨時文件

  1. MultiPartRequestWrapper wrapper =   
  2. (MultiPartRequestWrapper) req;  
  3. File doc = wrapper.getFiles("doc")[0];  

從上面的分析可以看出:

1)WebWork文件上傳在進入action棧之前不修改源碼或者做一些擴展、覆蓋之類的動作,在進入action棧的時候文件已經上傳,而且其文件名很難跟蹤(upload_00000017.tmp,到底是00000017,0000018,或者0000022等等),畢竟有很多人上傳文件,所以臨時文件名很難確定,所以如果你想知道上傳的進度很難。


2)利用WebWork文件上傳是兩次拷貝過程,webwork首先從request的輸入流中將文件流輸出到一個臨時文件,然后你再將此臨時文件拷貝到你需要指定的路徑。

【編輯推薦】

  1. WebWork框架原理與應用(1)
  2. 用WebWork注冊頁面建立過程
  3. WebWork注入Servlet方法詳解
  4. WebWork中返回INPUT的原因
  5. WebWork如何實現文件上傳配置過程
責任編輯:冰荷 來源: blog
相關推薦

2009-07-20 14:04:27

WebWork標簽嵌套

2010-05-20 13:58:34

2009-07-14 17:20:31

Webwork文件上傳

2009-07-08 09:29:58

WebWork

2009-07-14 15:52:00

WebWork文件下載

2009-09-04 10:55:34

2009-07-09 15:55:18

WebWork配置文件

2010-04-29 12:42:09

Unix系統

2012-07-24 17:10:10

Linux操作系統

2010-01-28 13:15:43

C++參數

2012-05-23 13:11:10

架構存儲

2010-11-23 15:50:44

MySQL中文建表

2010-02-23 17:57:58

Python部署

2009-11-05 15:36:58

WCF service

2009-07-20 13:29:13

xwork.xmlWebWork

2010-01-08 17:12:03

VB.NET短路判斷

2010-04-19 13:54:43

Unix操作系統

2010-04-06 09:31:52

Windows 7顯示白點

2009-09-03 15:33:13

RHEL紅帽linux

2009-12-31 15:08:22

Silverlight
點贊
收藏

51CTO技術棧公眾號

午夜视频成人| 中文字幕在线观看视频一区| 综合中文字幕| 亚洲午夜视频在线观看| 久久草视频在线看| 中文在线免费看视频| 欧美日韩成人| 亚洲人成亚洲人成在线观看| 特级西西444www| 欧洲一区精品| 亚洲特黄一级片| 精品久久sese| 国产精品欧美激情在线| 国产精品一区亚洲| 久久精品国产2020观看福利| 好吊色视频一区二区三区| 欧美影视资讯| 亚洲午夜精品网| 一区二区av| 五月婷婷久久久| 激情都市一区二区| 青青久久aⅴ北条麻妃| 爱爱视频免费在线观看| 亚洲系列另类av| 日韩欧美一级二级| 日本不卡一区在线| 欧美第一视频| 亚洲国产婷婷综合在线精品| 一本一本久久a久久精品综合妖精| 内射后入在线观看一区| 精品午夜久久福利影院| 国产精品第一区| 波多野结衣国产| 一区二区视频欧美| 久久成人精品视频| 国产精品麻豆一区| 经典一区二区| 亚洲欧美色图片| youjizz.com日本| 欧美精品三级在线| 欧美乱熟臀69xxxxxx| 日本精品久久久久中文字幕| 欧美激情网站| 亚洲成人激情自拍| 隔壁人妻偷人bd中字| 99在线播放| 中文字幕字幕中文在线中不卡视频| 日本午夜一区二区三区| 青青久草在线| 26uuu精品一区二区| 国产日韩欧美综合精品| 乱色精品无码一区二区国产盗| 国产精品18久久久久久久久 | 久99久视频| 成人毛片在线免费观看| 国产经典欧美精品| 97人人模人人爽人人喊38tv| 国产xxxxxx| 国产成人午夜视频| 国产精成人品localhost| 全国男人的天堂网| 成人av资源在线观看| 狠狠干一区二区| 日批免费在线观看| 91蜜桃免费观看视频| 免费国产在线精品一区二区三区| 可以直接在线观看的av| 国产色婷婷亚洲99精品小说| 欧美重口乱码一区二区| 国产三级在线| 亚洲视频一区二区在线观看| 日韩欧美一区二区三区四区五区 | 欧美美女18p| 久久成人国产精品入口| 最新日韩av| 日本久久久a级免费| 久久久久精彩视频| 国精产品一区一区三区mba桃花| 亚洲综合第一页| 日本激情视频网站| 国产亚洲欧美一级| 四虎4hu永久免费入口| 国语对白在线刺激| 色婷婷久久久亚洲一区二区三区 | 素人啪啪色综合| 欧美一区二区视频网站| 国产a级片视频| 国产成人1区| 欧美精品一本久久男人的天堂| 久久久久成人精品无码| 久久精品国语| 成人啪啪免费看| 五月婷婷伊人网| 国产精品美女视频| 国产成人艳妇aa视频在线 | 亚洲黄色天堂| 国产精品久久久久久久天堂| 国产黄色美女视频| 国产亲近乱来精品视频| 轻点好疼好大好爽视频| 天堂久久午夜av| 欧美xingq一区二区| 精品人妻一区二区三区蜜桃视频| 欧美1区视频| 国产99视频在线观看| 性做久久久久久久久久| 久久久久久久久免费| 九一免费在线观看| 成人在线免费电影网站| 亚洲黄页视频免费观看| 国产精品国产三级国产传播| 久久精品国产清高在天天线| wwwxx欧美| 日韩在线资源| 日韩欧美在线视频观看| 日韩成人av影院| 97精品一区| 日本老师69xxx| 国产77777| 亚洲欧美二区三区| 日本成人黄色网| 网红女主播少妇精品视频| 欧美精品亚州精品| 亚洲最大成人av| 久久精品欧美日韩精品| 亚洲熟妇国产熟妇肥婆| 亚洲成av人片在线观看www| 自拍视频国产精品| 黄色在线免费观看| av网站免费线看精品| 黄色污污在线观看| 996久久国产精品线观看| 亚洲一品av免费观看| 免费在线不卡视频| 成人一区二区三区在线观看| 久久99国产精品一区| 日韩毛片免费看| 在线看欧美日韩| 少妇高潮av久久久久久| 99这里只有久久精品视频| 国产 欧美 日本| 日韩在线精品强乱中文字幕| 超碰97人人做人人爱少妇| 一级做a爱片性色毛片| 国产精品色哟哟网站| 中文字幕在线观看第三页| 色综合综合色| 国产精品羞羞答答| 欧美私人网站| 欧美一区午夜精品| 亚洲av鲁丝一区二区三区| 国产剧情一区二区| 2022中文字幕| 国产精品对白久久久久粗| 欧美精品999| 涩涩视频免费看| 精品人伦一区二区三区蜜桃免费| 中文字幕在线播放一区| 西西裸体人体做爰大胆久久久| 久久66热这里只有精品| 在线天堂资源www在线污| 亚洲欧美日韩中文在线| 在线观看毛片网站| 1000精品久久久久久久久| 97免费公开视频| 亚洲欧洲一级| 青青草原成人| 国产亚洲观看| 97香蕉超级碰碰久久免费软件| 在线观看xxx| 欧美最新大片在线看| 成人黄色短视频| 高清成人免费视频| 亚洲爆乳无码专区| 97久久夜色精品国产| 国产高清自拍一区| 北岛玲heyzo一区二区| 在线国产精品视频| 国产刺激高潮av| 欧美日韩中字一区| 久久久一二三区| 久久嫩草精品久久久久| 污视频网址在线观看| 好吊一区二区三区| 欧美激情导航| 91精品在线免费视频| 性日韩欧美在线视频| 风间由美一区| 精品国产伦一区二区三区免费| 中文字幕国产在线观看| 亚洲视频一区二区在线| 免费在线观看成年人视频| 精品一区二区三区在线观看| 欧美 日韩 亚洲 一区| 日韩精品一区二区三区免费观看| www.av一区视频| 成人午夜sm精品久久久久久久| 欧美激情区在线播放| 欧美日韩激情视频一区二区三区| 9191成人精品久久| 4438国产精品一区二区| 亚洲婷婷在线视频| 午夜在线观看一区| 成人免费精品视频| 中文字幕一区久久| 久久福利影视| 日本国产中文字幕| 国产高清一区二区| 青娱乐一区二区| 欧美1区二区| 51国偷自产一区二区三区| 日韩电影免费观| 久久免费少妇高潮久久精品99| 日韩专区在线| 国产亚洲视频在线观看| 天堂网在线播放| 欧美一二三四区在线| 中文字幕免费播放| 精品美女永久免费视频| 午夜少妇久久久久久久久| 国产精品污污网站在线观看| 疯狂揉花蒂控制高潮h| 国产精品影视网| 天天综合网久久| 日韩不卡一二三区| 92看片淫黄大片一级| 欧美全黄视频| 国产成人免费高清视频| 日韩欧美高清在线播放| 日本一区二区三区在线视频| 色天天色综合| 国产无套精品一区二区| 91精品国产自产精品男人的天堂| 国产中文字幕亚洲| 91精品国产经典在线观看| 日本精品久久久久影院| 日本不良网站在线观看| 久久频这里精品99香蕉| 欧美人与动牲性行为| 久久成人一区二区| 日本中文字幕电影在线免费观看| 伊人久久五月天| 福利视频在线播放| 中文字幕日韩高清| 午夜免费福利在线观看| 精品久久国产精品| 国产黄大片在线观看画质优化| 亚洲一区二区福利| 99精品老司机免费视频| 中文字幕日韩欧美在线视频| 成人jjav| 久久精品国产2020观看福利| 麻豆传媒视频在线| 大胆欧美人体视频| 中文在线观看免费| 欧美精品久久久久a| 丁香花视频在线观看| 午夜免费在线观看精品视频| 精精国产xxxx视频在线野外| 57pao成人国产永久免费| 另类专区亚洲| 国产精品偷伦一区二区| 96sao精品免费视频观看| www.一区二区三区| 日韩av网址大全| 日韩av在线一区二区三区| 91欧美日韩| 免费的一级黄色片| 一道本一区二区| 日韩一级免费在线观看| 久久99精品国产91久久来源| 波多野结衣电影免费观看| 成人午夜大片免费观看| 精品无码一区二区三区| 最好看的中文字幕久久| 久久久久久久99| 91国偷自产一区二区开放时间| 国产一区二区三区黄片| 欧美xxxxxxxxx| 国际av在线| 欧美超级乱淫片喷水| 僵尸再翻生在线观看| 国产精品中文久久久久久久| 国产一区二区视频在线看| 精品久久蜜桃| 国产精品精品| 精品这里只有精品| 久久er精品视频| 天天躁日日躁狠狠躁免费麻豆| 久久夜色精品一区| 中文字幕五月天| 欧美日韩中国免费专区在线看| 在线视频你懂得| 亚洲成年人影院在线| 成人免费在线观看| 午夜精品久久久久久久99热浪潮| 精品久久久网| 农村寡妇一区二区三区| 亚洲精品va| 丰满少妇在线观看| caoporn国产精品| 777777国产7777777| 色综合色狠狠综合色| 精品人妻无码一区二区三区蜜桃一| 精品无人区乱码1区2区3区在线| 国产激情在线视频| 国产成人综合一区二区三区| 成人午夜大片| 男插女免费视频| 日本一区中文字幕| 国产精品无码专区| 一区二区激情视频| 亚洲一区 中文字幕| 亚洲男人天堂2023| 国产免费拔擦拔擦8x在线播放| 成人精品福利视频| 欧美综合久久| 日本成人在线免费视频| 成人18精品视频| 久久久久久欧美精品se一二三四| 欧美熟乱第一页| 欧美日本网站| 欧美性视频精品| 女同一区二区三区| 男人天堂a在线| 国产精品一区二区在线播放| 欧美a在线播放| 日本二三区不卡| 麻豆av电影在线观看| 日本不卡免费高清视频| 久久aimee| 日本欧美黄色片| 成a人片国产精品| 精品亚洲永久免费| 日韩精品一区二区三区三区免费| 国产美女av在线| 成人一区二区电影| 91精品国产91久久久久久黑人| 亚洲精品自拍网| 国产精品国产三级国产aⅴ原创| 日本黄色一级视频| 亚洲午夜精品久久久久久性色| 欧洲av不卡| 神马影院一区二区三区| 日韩不卡在线观看日韩不卡视频| аⅴ天堂中文在线网| 欧美三级韩国三级日本三斤| www 日韩| 国产日韩欧美在线看| 99久久亚洲精品蜜臀| 国内自拍第二页| 亚洲乱码中文字幕| 亚洲黄色在线播放| 91国语精品自产拍在线观看性色| 精品福利一区| 国产又大又硬又粗| 国产亚洲精品精华液| 中文字幕二区三区| 北条麻妃久久精品| 日韩国产在线不卡视频| 欧美中文字幕在线观看视频| 成人ar影院免费观看视频| 日本学生初尝黑人巨免费视频| 日韩高清欧美高清| 亚洲精品555| 欧洲金发美女大战黑人| 成人白浆超碰人人人人| 性无码专区无码| 中文字幕亚洲综合久久筱田步美| 亚洲天堂网站| 乱熟女高潮一区二区在线| 99re这里只有精品视频首页| 国产精品久免费的黄网站| 最近中文字幕日韩精品| 日本免费精品| 欧美女人性生活视频| 国产精品久久99| 手机在线不卡av| 国产精品免费电影| 午夜精品久久久久99热蜜桃导演 | 777国产偷窥盗摄精品视频| 亚洲区小说区图片区qvod按摩| www.久久91| 婷婷久久综合九色综合绿巨人| 第一福利在线| 成人在线视频电影| 奇米影视7777精品一区二区| 久久国产露脸精品国产| 亚洲欧洲日产国产网站| 精品国产第一国产综合精品| 精品这里只有精品| 亚洲欧美视频一区| 欧美日韩国产中文字幕在线| 91免费高清视频| 丝袜亚洲精品中文字幕一区| 免费中文字幕日韩| 亚洲人成电影网站色www| av成人男女| 日本中文字幕观看| 色哟哟亚洲精品|