struts:实现图片的上传 argument type mismatch error
来源:互联网 发布:byte数组合并 编辑:程序博客网 时间:2024/05/16 09:49
upload.jsp的部分源代码:
<html:form action="upload.do" method="post">
请选择需要上传的照片:
<html:file property="photoFile"/>
<html:submit value="上传"/>
</html:form>
接下来需要在ActionForm中声明这个属性,并设置getter和setter方法,这部分源代码如下:
public class UploadForm extends ActionForm {
protected FormFile photoFile;
public FormFile getPhotoFile() {
return photoFile;
}
public void setPhotoFile(FormFile photoFile) {
this.photoFile = photoFile;
}
}
这个表单的photoFile属性不是String或boolean,而是org.apache.struts.upload.FormFile。因为用户上传的是一个二进制文件,而HTTP协议是以文本形式传输数据的,这就需要进行转换。打个比方,一辆汽车需要从甲地送到乙地,但是两地之间只有一条索道,汽车没法开,所以就想个办法在甲地把汽车先拆了,把零件送到乙地再重新组装成一辆汽车。FormFile起的就是拆卸和组装的作用,只不过它把拆卸、传输和组装的过程都封装起来了,我们看到的是一辆汽车从甲地开进FormFile,过一会它就从乙地开出来了J我们要决定的只是把它停到什么地方,这就是Action的活了。
public class uploadAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
UploadForm uploadForm = (UploadForm) form;
if (!photoFile.getFileName().equals("")) {
try {
InputStream stream = photoFile.getInputStream();
String filePath = request.getRealPath("/");
filePath=filePath+photoFile.getFileName();
OutputStream bos = new FileOutputStream(filePath);
int bytesRead = 0;
byte[] buffer = new byte[400000];
while ((bytesRead = stream.read(buffer, 0, 400000)) != -1) {
bos.write(buffer, 0, bytesRead);
bos.flush();
bos.close();
stream.close();
}
} catch (Exception e) {
System.err.print(e);
}
photoFile.destroy();
}
return (mapping.findForward("toIndex"));
}
}
struts-config.xml中<action-mappings>里如下定义:
<action path="/upload" type="com.webex.tmis.uploadAction" name="UploadForm" scope="request" input="/wrong.jsp" />
运行一下:抛出如下异常:
struts的argument type mismatch错误..
java.lang.IllegalArgumentException: Cannot invoke com.webex.tmis.uploadForm.setPhotoFile - argument type mismatch,
debug了一下,原来是要把String 强行转换成FormFile,所以才会抛出argument typemismatch,一查,原来是这样的:表单(html:form)中enctype="multipart/form-data"的意思,是设置表单的MIME编码,默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能增加传递文件数据的功能,进行下面的操作.enctype="multipart/form-data"是上传二进制数据;form里面的input的值以2进制的方式传过去。在html的form中加入enctype="multipart/form-data"的时候,图片上传问题解决了。
upload.jsp代码如下:
<html:form action="upload.do" enctype="multipart/form-data" method="post">
请选择需要上传的照片:
<html:file property="photoFile"/>
<html:submit value="上传"/>
</html:form>
- struts:实现图片的上传 argument type mismatch error
- struts:实现图片的上传 argument type mismatch error
- struts上传图片argument type mismatch错误
- struts上传文件异常argument type mismatch
- 使用struts文件上传标签时报 argument type mismatch
- 上传文件时碰到argument type mismatch的问题
- argument type mismatch
- argument type mismatch
- argument type mismatch
- argument type mismatch 解决
- Struts常见问题5:java.lang.IllegalArgumentException: argument type mismatch
- jsp页面使用struts标签报argument type mismatch异常
- Struts常见问题5:java.lang.IllegalArgumentException: argument type mismatch
- javafx argument type mismatch 异常
- argument type mismatch出现的原因,以及解决方法
- 关于JMX Modul MBean 报argument type mismatch的异常
- struts:实现图片的上传
- Struts Form中Date类型之“argument type mismatch”错误解决方法
- IE8,价值不可估量的新一代浏览器
- 各种Excel VBA的命令
- 在vs2008下使用cygwin(22):使用tls
- Java程序中经常需要用的3个.jar包
- 关于 eclipse 打开报错 jvm..
- struts:实现图片的上传 argument type mismatch error
- 生活在今天
- jQuery中的slideUp()、slideDown()、hide()、show()
- Python 发邮件
- 无所不在的.NET技术愈见强大
- 黄鹤楼
- PHP中的CURL函数库
- innerHTML的作用
- 2008微软MVP大会金庸组群雄聚