struts:实现图片的上传
来源:互联网 发布:高程数据下载 编辑:程序博客网 时间:2024/05/21 13:15
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 type mismatch,一查,原来是这样的:表单(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:实现图片的上传
- Struts实现图片上传
- Struts:实现图片上传
- Struts实现图片上传
- xheditor+struts 实现图片上传
- struts实现的图片的上传和下载
- struts:实现图片的上传 argument type mismatch error
- struts:实现图片的上传 argument type mismatch error
- struts上传图片的类
- CKEditor结合struts实现图片上传
- struts上传文件的实现
- struts实现上传的例子
- struts图片的上传,压缩,加水印
- javaweb中struts的图片上传
- 图片上传的实现
- 实现图片的上传
- 实现图片的上传
- 实现图片的上传
- ASP二级联动
- 最简单的U盘安装windows 7的方法
- Bellman-Ford算法以及优化(SPFA)
- 通过表取物料特性值
- CSS样式表
- struts:实现图片的上传
- Windows Driver Kit: Device Installation System-Defined Device Interface Classes
- 每日英语-8/12/2009
- 摘抄:十个不要
- Asp.Net中Excel操作权限的问题
- 求救vista ultimate下如何安装vs 2008?
- oracle 如何使字段值自加
- 编写高效的Android代码
- 快速排序--weiss版