看过很多关于图片上传的demo,但是都比较乱。本案例经过我几次调整,整理成了一个工具类,与大家分享之。
第一步:准备工作。如果status2.3.4版本以下,struts2在上传文件的时候 upload.parseRequest(request)值将为空,解决办法是写一个继承JakartaMultiPartRequest类的子类,如下所示:
public class RequestParseWrapper extends JakartaMultiPartRequest {
@Override
public void parse(HttpServletRequest arg0, String arg1) throws IOException {
}
}
同时在struts.xml配置文件中配置加入:
<bean type= "org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name= "myRequestParser" class= "com.zho.app.status.request.file.RequestParseWrapper"
scope= "default" optional= "true"/>
<constant name= "struts.multipart.handler" value= "myRequestParser"/>
第二步:
前端提交:提交的方式有两种,第一种是表单提交,这里需要注意的是form表单中form标签中加入属性enctype="multipart/form-data",并且method必须是post提交方式,如下所示:
<form action="<%=basePath %>/sharedFarmUsers_sp/posting.action" enctype="multipart/form-data" method="post" id="mytest_id">
<input type="text" name="userid" /><br />
<input type="file" id="f2" name="image" /><br />
<input type="submit" value="上传" /><br />
</form>
第二种提交方式是异步提交,需要导入jquery.form.js文件,form表单属性同第一种一致,但不用写action属性。
<form id="contentForm" method="post" enctype="multipart/form-data">
<div>
<span>正文内容</span>
<div>
<input type="text" name="consultationid" value="${consultationid }">
<select id="type_id" name="type">
<option value="0">图片</option>
<option value="1">文本</option>
</select>
<div id=typeview>
</div>
<!-- <input type="file" name="value"/><br>
<textarea rows="3" cols="80" name="value"></textarea> -->
</div><br>
</div>
<p><input type="button" value="正文编辑" οnclick="consultationTextEditor()"/><input type="reset" value="重置"/></p>
<p><span>${success }</span></p>
</form>
<script type="text/javascript">
function consultationTextEditor(){
var option={
type:'POST',
url:'<%=path %>/sharedFarmAdmin_sp/consultationTextEditor.action',
dataType:'text',
data: '',
success:function(data){
}
};
$("#contentForm").ajaxSubmit(option);
}
</script>
第三步:后台接受把图片存入服务器中,把传入服务器中的图片地址存入数据库。