今天用struts写另一个上传图片的小例子,写完之后进行测试。测试的过程中发现上传非中文命名的图片显示没有问题,但是上传中文命名图片后,发现上传没有问题,但是不显示。下面是我的代码(与上传无关的代码已删除,只作为思路体现):
jsp页面:
<form name="itemForm" method="post" action="item.do" enctype="multipart/form-data" id="itemForm">
<input type="hidden" name="itemNo" value="${item.itemNo }"/>
<div align="center">
<table width="95%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="29">
<div align="right">
物料代码:
</div>
</td>
<td>
${item.itemNo }
</td>
</tr>
<tr>
<td height="26">
<div align="right">
物料名称:
</div>
</td>
<td>
${item.itemName }
</td>
</tr>
<tr>
<td height="74">
<div align="right">
图片:
</div>
</td>
<td>
<img src="upload/${item.fileName}" width="85" height="49">
</td>
</tr>
<tr>
<td width="22%" height="29">
<div align="right">
<font color="#FF0000">*</font>选择图片:
</div>
</td>
<td width="78%">
<input name=uploadFileName type="file" class="text1" size="40" maxlength="40">
</td>
</tr>
</table>
<hr width="97%" align="center" size=0>
<div align="center">
<input name="btn_upload" class="button1" type="submit"
id="btn_upload" value="上传">
<input name="btnBack" class="button1" type="button" id="btnBack"
value="返回" onClick="<%=basePath %>item.do">
</div>
</div>
</form>
ActionForm(get和set方法就不列出了)
private String itemName;
private FormFile uploadFileName;
Action
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//将form转换成ItemActionForm
ItemActionForm iaf=(ItemActionForm)form;
//通过工厂实例化物料维护类
ItemService itemService=(ItemService)BeanFactory.getInstance().getServiceObject(ItemService.class);
//获取上传的文件信息
FormFile formFile=iaf.getUploadFileName();
//创建目录
File directory=new java.io.File(request.getSession().getServletContext().getRealPath("upload"));
if (!directory.isDirectory()) {
directory.mkdir();
}
//将文件写入到制定目录
FileOutputStream fos=new FileOutputStream(request.getSession().getServletContext().getRealPath("upload")+"\\"+formFile.getFileName());
fos.write(formFile.getFileData());
fos.close();
//更新数据库信息
itemService.uploadItemImage(iaf.getItemNo(), formFile.getFileName());
return mapping.findForward("upload_success");
}
配置文件
<struts-config>
<form-beans>
<form-bean name="itemForm" type="com.jianxin.drp.web.forms.ItemActionForm" />
</form-beans>
<action-mappings>
<action path="/item"
name="itemForm"
type="com.jianxin.drp.web.actions.ItemAction"
scope="request"
>
<forward name="upload_success" path="/item.do" redirect="true" />
</action>
</action-mappings>
<message-resources parameter="MessageResources" />
</struts-config>
可是上传中文命名的图片后,就是不能显示。这种问题的出现,是源于浏览器默认使用的发送编码与服务器的编码不一致导致的。
我用的是tomcat7.0,在tomcat\conf下的server.xml,在Connector port="8080"那个标签里面加上URIEncoding="UTF-8"就行了,这是因为一般浏览器默认用的发送编码是UTF-8。
在IE下可以这样修改,工具--》Internet选项--》高级,将下图所示选项给勾去掉,点击确定,那么在IE下就可以显示了(不建议使用)。