精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

一区二区三区国产精品| 国产精品综合在线视频| 色悠悠国产精品| wwwxxxx在线观看| 午夜伦理福利在线| 国产精品久久久久久久久久久免费看| 亚洲一区二区三区成人在线视频精品| 日韩福利片在线观看| 日韩精品免费| 亚洲精品wwwww| 亚洲欧美日本一区二区| 香蕉伊大人中文在线观看| 成人免费在线观看入口| 久久久水蜜桃| www.看毛片| 日本特黄久久久高潮| 97精品国产97久久久久久免费 | www.国产精品一区| 欧美亚洲自拍偷拍| 黄色动漫网站入口| xxx在线免费观看| 国产精品国产精品国产专区不蜜 | 精品国产91| 亚洲精品久久久久中文字幕二区| www.com黄色片| 一根才成人网| 午夜精品123| 欧美黄色免费网址| 男人天堂手机在线| 欧美极品xxx| 久久精品日产第一区二区三区| 国产伦精品一区二区三区四区 | 国产欧美一区二区三区久久人妖| 男人的天堂一区二区| 欧美婷婷在线| 萌白酱国产一区二区| 美国黄色特级片| 国产成人影院| 亚洲天堂精品在线| 五级黄高潮片90分钟视频| а√中文在线天堂精品| 日韩一区二区免费在线观看| 一个色综合久久| 狠狠久久综合| 欧美日韩一卡二卡| 亚洲综合色在线观看| h1515四虎成人| 欧洲国内综合视频| 牛夜精品久久久久久久| 最新日韩三级| 欧美性极品少妇| 一区二区在线播放视频| 一本大道色婷婷在线| 欧美日韩中文字幕在线| 国产视频九色蝌蚪| www在线观看黄色| 亚洲成人福利片| 99爱视频在线| 日韩欧美精品电影| 欧美日韩一区视频| 中文字幕一区久久| 精品中文字幕一区二区三区四区 | 99久久99视频只有精品| 日韩中文字幕国产| 欧美成人三级视频| 亚洲精选一区| 国产91色在线|免| 丰满人妻一区二区三区四区| 免费观看30秒视频久久| 成人亚洲综合色就1024| 国产高清在线观看视频| 成人丝袜18视频在线观看| 成人三级视频在线观看一区二区| 免费观看成年人视频| 91美女福利视频| 亚洲精品久久久久久一区二区| 免费在线看黄色| 夜夜嗨av一区二区三区四季av| 国产美女在线一区| 亚州一区二区三区| 欧美一区二区三级| 日韩免费高清一区二区| 欧美精品尤物在线观看 | av中文在线资源库| 91电影在线观看| 亚洲精品乱码久久久久久动漫| 99久久香蕉| 亚洲最大在线视频| 国产亚洲欧美久久久久| 久久久噜噜噜久久狠狠50岁| 成人a在线视频| 蜜臀av免费在线观看| 国产日产欧美一区| 高清无码一区二区在线观看吞精| 成人美女黄网站| 91精品国产欧美日韩| 性欧美成人播放77777| 久久精品久久久| 欧美亚洲伦理www| 999av视频| 久久久国产精华| 成人一级生活片| 成人黄色免费观看| 亚洲精品99久久久久| 国产又粗又猛又爽又黄的视频四季 | 亚洲国产一区二区三区在线| 后进极品白嫩翘臀在线播放| 欧美四级电影在线观看| 永久免费未满蜜桃| 久久久久午夜电影| 日韩美女视频免费看| 亚洲av综合色区无码一区爱av | 久久人体大尺度| 日韩限制级电影在线观看| 久久午夜福利电影| 亚洲三级网站| 99视频在线播放| 一级毛片视频在线观看| 欧美日韩一区二区精品| 日批视频免费看| 一区二区影视| 国产精品视频成人| 国产中文字幕在线| 色综合天天综合| 国产精品一级黄片| 亚洲私拍自拍| 国产传媒一区| 天堂成人av| 欧美一卡在线观看| 在线观看亚洲网站| 麻豆精品一区二区三区| 日韩一本精品| 奇米777日韩| 亚洲免费电影一区| 九九精品免费视频| 2021中文字幕一区亚洲| 91成人在线观看喷潮教学| swag国产精品一区二区| 欧美激情综合色| 黄色片网站免费在线观看| 一区二区三区欧美久久| 亚洲精品在线网址| 中文字幕一区二区三区欧美日韩 | 久久精品亚洲天堂| 天天久久综合| 91久久精品国产91久久性色| 一广人看www在线观看免费视频| 在线看国产一区二区| 欧美做受高潮6| 日日夜夜精品视频天天综合网| 欧美日韩一区在线播放| 电影亚洲精品噜噜在线观看 | 久久精品视频观看| 欧美一级片在线看| 九九九在线视频| 成人国产精品免费观看视频| 国产96在线 | 亚洲| 欧美日韩夜夜| 国产精品极品在线| 日本高清在线观看wwwww色| 欧美日韩一区二区三区免费看| 九九这里只有精品视频| 国产一区在线精品| 日韩av中文字幕第一页| 亚洲大片精品免费| 国产精品一区二区久久| 国产在线观看91| 精品剧情v国产在线观看在线| 人人干人人干人人干| 久久精品视频一区二区| 在线能看的av网站| 精品99视频| 日本精品一区二区| www.久久久.com| 久久人91精品久久久久久不卡| 五月婷婷综合久久| 欧美日本国产一区| 久久这里只有精品免费| 久久久综合九色合综国产精品| 中文字幕网av| 亚洲美女黄色| 亚洲欧美成人一区| 91亚洲无吗| 国产精品中文字幕在线| 精品精品导航| 国产一区二区美女视频| 国产成人精品白浆久久69| 欧美性69xxxx肥| 国精产品一区一区二区三区mba| 成人午夜激情在线| 男操女免费网站| 日韩视频三区| 伊人久久大香线蕉午夜av| 超碰一区二区三区| 国产欧美日韩中文字幕在线| 黄色美女视频在线观看| zzijzzij亚洲日本成熟少妇| 香蕉视频成人在线| 91精品国产一区二区三区香蕉| 国产精品suv一区二区三区| 国产精品久久久久永久免费观看 | 午夜在线视频观看| 欧美乱熟臀69xxxxxx| 青青国产在线观看| 亚洲欧美日韩国产综合在线| 久久亚洲AV成人无码国产野外| 国产一区二区美女诱惑| 激情综合网俺也去| 日韩午夜av| 少妇久久久久久被弄到高潮| 久久电影院7| 欧美精品123| 国产精品色呦| 91九色偷拍| 日韩欧美激情| 国产精品草莓在线免费观看| 99thz桃花论族在线播放| 久久久国产成人精品| 成人福利在线| 亚洲欧美成人一区二区在线电影| 欧美亚洲精品在线观看| 欧美一区二区三区四区视频| 中文字幕精品在线观看| 一道本成人在线| 91午夜视频在线观看| 一区二区三区四区中文字幕| 久久国产高清视频| 国产精品私人自拍| 亚洲AV无码成人精品区明星换面| 91老司机福利 在线| 理论片大全免费理伦片| 福利电影一区二区三区| 天天爽夜夜爽视频| 国产一区二区三区在线看麻豆| 91制片厂毛片| 奇米影视一区二区三区| 性chinese极品按摩| 日本在线播放一区二区三区| 日韩中文字幕组| 久久综合图片| 激情五月婷婷久久| 日本女优在线视频一区二区| 亚洲一二三区av| 奇米精品一区二区三区在线观看| 亚洲男人天堂色| 免费观看成人av| 国产探花在线观看视频| 国产不卡视频在线观看| 丰满熟女人妻一区二区三区| 成人免费视频国产在线观看| 欧美双性人妖o0| 91丨porny丨国产| 一级性生活毛片| 中文字幕不卡的av| 欧美激情精品久久久久久免费| 亚洲欧美自拍偷拍色图| 国产大片免费看| 午夜精品福利一区二区蜜股av| www欧美在线| 欧美三级在线看| 99热这里是精品| 亚洲成年人在线播放| 天堂中文字幕av| 亚洲午夜久久久久久久| 午夜视频在线| 欧美国产亚洲视频| 中文字幕高清在线播放| 国产精品视频免费在线观看| 亚洲色图综合| 国产一区免费在线| 欧美综合一区| 日韩a级黄色片| 久久久久国产精品午夜一区| 国产日韩欧美久久| 成人午夜短视频| 日韩人妻无码精品综合区| 自拍偷自拍亚洲精品播放| 欧美国产在线看| 欧美性猛交xxxx乱大交| 一级黄色大片免费观看| 欧美成人vr18sexvr| 精品视频三区| 精品中文字幕乱| 久久电影tv| 国产成人精品免费视频大全最热| 一道本一区二区三区| 99热都是精品| 久久精品盗摄| 日韩av成人网| 欧美激情一区二区三区全黄| 免费在线观看国产精品| 欧洲色大大久久| 免费av网站观看| 久久天天躁狠狠躁夜夜躁2014| 国产在线美女| 95av在线视频| 经典一区二区| r级无码视频在线观看| 精品一区二区三区在线播放视频 | a级片在线视频| 亚洲视频在线看| 黄在线观看免费网站ktv| 亚洲电影影音先锋| 国产精品欧美在线观看| 性色av一区二区三区红粉影视| 欧美大胆成人| 高清av免费一区中文字幕| 精品国产乱码久久久久久蜜坠欲下 | 伊人久久大香线蕉| www成人免费| 精品影院一区二区久久久| 欧洲女同同性吃奶| 五月婷婷久久综合| 精品国产伦一区二区三区| 在线观看国产精品91| 美女网站在线看| 不卡一区二区三区视频| 国产韩日影视精品| 色一情一乱一伦一区二区三区日本| 成人免费高清在线| 欧美黄色免费在线观看| 欧美精品1区2区3区| 成年人在线看| 国产精品18久久久久久首页狼| 日韩欧美美女在线观看| 加勒比成人在线| 粉嫩久久99精品久久久久久夜| 天天操天天操天天操天天操天天操| 欧美午夜精品一区二区蜜桃| 国产精品麻豆一区二区三区| 45www国产精品网站| 欧美freesex8一10精品| 国产av天堂无码一区二区三区| 国产99久久久国产精品潘金 | 岛国大片在线观看| 欧美在线一级va免费观看| 日韩欧美美女在线观看| 国产精品秘入口18禁麻豆免会员 | 久久99精品国产一区二区三区| 国产精品www.| 欧美老女人bb| 亚洲在线一区二区三区| 精品人妻一区二区三区日产乱码 | 国产成人亚洲精品狼色在线| 精品一区在线观看视频| 日韩一二三区不卡| 黄污视频在线观看| 黄色一区三区| 丝袜诱惑制服诱惑色一区在线观看| 中文字幕在线看高清电影| 欧美在线观看视频一区二区| 1024国产在线| 91免费国产网站| 亚洲网站在线| 成人手机在线免费视频| 91久久精品网| 日本在线人成| 97免费资源站| 国产精品日本| 久久久久久国产免费a片| 欧美精品日韩精品| 欧美理论电影| 欧美久久电影| 久久成人精品无人区| 妺妺窝人体色www聚色窝仙踪| 精品国产91乱码一区二区三区| 182在线播放| 台湾成人av| 激情六月婷婷综合| 国产一级理论片| 亚洲色无码播放| 精品久久国产一区| www在线观看免费| 欧美激情一区二区三区不卡| 国产免费视频一区二区三区| 久久97精品久久久久久久不卡| 久久99精品国产自在现线| 一区二区三区国产免费| 亚洲精选一二三| 神马亚洲视频| 91精品在线播放| 日韩视频二区| 国产探花在线视频| 亚洲国产精久久久久久| 国产91欧美| 亚洲色成人www永久在线观看 | 欧美日韩综合精品| 国产在线视频一区二区三区| 日韩精品成人一区| 日韩在线观看免费高清| 久久97精品| 17c国产在线| 色综合久久中文字幕综合网| www久久日com| 日韩美女一区| av网站免费线看精品| 91theporn国产在线观看| 91av网站在线播放| 中文字幕一区二区精品区| 极品蜜桃臀肥臀-x88av|