文件上传

1、表单经常上传附件, 会使用到  ENCTYPE= "multipart/form-data "  


这句话的意思是处理表单的所有信息以流方式提交, 页面上的所有信息已经都转换为了文件流, 为的是能让服务端得到你上传的文件的文件流。 


表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;
只有使用了multipart/form- data,才能完整的传递文件数据,进行下面的操作. 


enctype=\"multipart/form-data\"是上传二进制数据; form里面的input的值以2进制的方式传过去。


 
form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功, 
表单其他信息也变成了流,用request.getParameter()  方法当然得不到值了 




这个时候我们一般使用组件处理 
smartupload 组件 
用smartupload提供的一个方法可以得到值 
mySmartUpload.getRequest().getParameter() 


2、  
<label>专为input元素服务,为其定义标记。for属性规定label与哪个表单元素绑定


label和表单控件绑定方式又两种:


1)将表单控件作为label的内容,这样就是隐士绑定。


此时不需要for属性,绑定的控件也不需要id属性。


隐式绑定:
<label>Date of Birth: <input type="text" name="DofB" /></label>


2)为<label>标签下的for属性命名一个目标表单的id,这就是显示绑定。


显式绑定:
<label for="SSN">Social Security Number:</label>
<input type="text" name="SocSecNum" id="SSN" />




问题:为什么要给<label>加上for属性?
给<label>加了for属性绑定了input控件后,可以提高鼠标用户的用户体验。
如果在label元素内点击文本,就会触发此控件。就是说,当用户渲染该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。




3、config 对象代表当前JSP 配置信息,但JSP 页面通常无须配置,因此也就不存在配置信息。该对象在JSP 页面中非常少用,但在Servlet 则用处相对较大。因为Servlet 需要配置在web.xml 文件中,可以指定配置参数。


servlet中获取:this.getServletConfig();






4、关键代码:
                SmartUpload su = new SmartUpload();
su.initialize(this.getServletConfig(), request,response);
su.setAllowedFilesList("jpg, png");
su.setCharset("UTF-8");
 
try {
su.upload();
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

File f = su.getFiles().getFile(0);
try {
f.saveAs("upload/"+f.getFileName(),SmartUpload.SAVE_VIRTUAL);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("imgurl", "upload/"+f.getFieldName()) ;
request.getRequestDispatcher("index.jsp").forward(request, response);




index.jsp:
<img alt="" src="<%=request.getAttribute("imgurl") %>">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值