日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2文件上传中,如何限制上传的文件类型

發(fā)布時(shí)間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2文件上传中,如何限制上传的文件类型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

來源:http://www.blogjava.net/landor2004/archive/2009/06/11/281416.html

這個(gè)在struts2的doc中已經(jīng)有所說明,但是說得并不詳細(xì),而且他給的例子是有錯(cuò)誤的,下面我將列出文件上傳并限制類型的具體步驟

struts2版本是2.1.6
struts2是根據(jù)contentType來限制的,并不是文件的擴(kuò)展名
比如我想僅上傳image/png,image/gif,image/jpeg這三種文件類型

第一種方法是通過javascript校驗(yàn)來限制,這個(gè)比較簡(jiǎn)單,獲取input的value然后截取擴(kuò)展名進(jìn)行判斷即可

第二種是根據(jù)struts2自帶的fileupload攔截器中提供的allowedTypes來進(jìn)行限制,步驟如下:
1 配置fileupload攔截器
struts2的defaultStack中已經(jīng)含有fileupload攔截器,如果想加入allowedTypes參數(shù),需要從新寫一個(gè)defaultstack ,拷貝過來修改一下即可:

<interceptor-stack?name="myDefaultStack">
????????????????<interceptor-ref?name="exception"/>
????????????????<interceptor-ref?name="alias"/>
????????????????<interceptor-ref?name="servletConfig"/>
????????????????<interceptor-ref?name="i18n"/>
????????????????<interceptor-ref?name="prepare"/>
????????????????<interceptor-ref?name="chain"/>
????????????????<interceptor-ref?name="debugging"/>
????????????????<interceptor-ref?name="profiling"/>
????????????????<interceptor-ref?name="scopedModelDriven"/>
????????????????<interceptor-ref?name="modelDriven"/>
????????????????<interceptor-ref?name="fileUpload">
??????????????????<param?name="allowedTypes">
?????????????????????image/png,image/gif,image/jpeg
??????????????????</param>
????????????????</interceptor-ref>
????????????????<interceptor-ref?name="checkbox"/>
????????????????<interceptor-ref?name="staticParams"/>
????????????????<interceptor-ref?name="actionMappingParams"/>
????????????????<interceptor-ref?name="params">
??????????????????<param?name="excludeParams">dojo/..*,^struts/..*</param>
????????????????</interceptor-ref>
????????????????<interceptor-ref?name="conversionError"/>
????????????????<interceptor-ref?name="validation">
????????????????????<param?name="excludeMethods">input,back,cancel,browse</param>
????????????????</interceptor-ref>
????????????????<interceptor-ref?name="workflow">
????????????????????<param?name="excludeMethods">input,back,cancel,browse</param>
????????????????</interceptor-ref>
????????????</interceptor-stack>
????????</interceptors>
????????<default-interceptor-ref?name="myDefaultStack"></default-interceptor-ref> 僅修改代碼中的
<interceptor-ref?name="fileUpload">
??????????????????<param?name="allowedTypes">
?????????????????????image/png,image/gif,image/jpeg
??????????????????</param>
????????????????</interceptor-ref>
上面配置的是上傳文件類型的限制,其實(shí)共有兩個(gè)參數(shù)
maximumSize?(可選)?-這個(gè)攔截器允許的上傳到action中的文件最大長(zhǎng)度(以byte為單位).?注意這個(gè)參數(shù)和在webwork.properties中定義的屬性沒有關(guān)系,默認(rèn)2MB
allowedTypes?(可選)?-以逗號(hào)分割的contentType類型列表(例如text/html),這些列表是這個(gè)攔截器允許的可以傳到action中的contentType.如果沒有指定就是允許任何上傳類型.

2 jsp頁面定義如下( testFileUpload.jsp)
<s:form?action="testFileUpload"method="post"enctype="multipart/form-data">
????????<s:file?name="file"theme="simple"/>
????????<s:fielderror?name="file"></s:fielderror>
????????<s:submit/>
????</s:form> 3 后臺(tái)的action聲明如下(我用的是struts2的注解進(jìn)行action配置)
publicclassTestFileUploadAction?extendsActionSupport{
????privateFile?file;
????privateString?fileContentType;
????privateString?fileFileName;
????@Action(
????????????value?="testFileUpload",?results?={
????????????????@Result(name?="input",?location?="/testFileUpload.jsp"),
????????????????@Result(name?="success",?location?="/testFileUploadSuccess.jsp")
????????????}
????)
????publicString?execute()?{
????????returnSUCCESS;
????}
get/set......
} 注意:如果jsp中file的name="xxx",那么后臺(tái)action中的屬性要做相應(yīng)更改為
privateFile?xxx ;
???? privateString?xxx ContentType;
???? privateString?xxx FileName;
同時(shí)注意大小寫一定要一致

4 定義錯(cuò)誤文件類型的消息提示,這個(gè)需要用到struts2的資源文件,在struts.properties文件中加入
struts.custom.i18n.resources=globalMessages globalMessages對(duì)應(yīng)著資源文件名

5 在源文件夾下定義資源文件 globalMessages.properties,并在里面加入如下信息:
struts.messages.error.content.type.not.allowed=upload?file?contenttype?is?invalidate
這里稍作說明(拷貝一下struts2的幫助):
如果你的action實(shí)現(xiàn)了ValidationAware接口(如果action繼承了ActionSupport,那么就相當(dāng)于實(shí)現(xiàn)了ValidationAware),這個(gè)攔截器就可以添加幾種字段錯(cuò)誤.這些錯(cuò)誤信息是基于存儲(chǔ)在struts-messages.properties文件中的一些i18n值,這個(gè)文件是所有i18n請(qǐng)求的默認(rèn)文件.你可以在自己消息文件的復(fù)寫以下key的消息文 字
struts.messages.error.uploading?-文件不能上傳的通用錯(cuò)誤信息
struts.messages.error.file.too.large?-上傳文件長(zhǎng)度過大的錯(cuò)誤信息
struts.messages.error.content.type.not.allowed?-當(dāng)上傳文件不符合指定的contentType

以上配置完畢后,測(cè)試一下,對(duì)于非法的contentType,例如xxx.log這個(gè)文件的的contentType是pplication/octet-stream?
會(huì)給出提示: upload?file?contenttype?is?invalidate

總結(jié)

以上是生活随笔為你收集整理的struts2文件上传中,如何限制上传的文件类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。