首先也是最重要的就是首先导入jar包
我的之前就是忘记导入jar包了,一直不对,以为代码错了,最后才想起来忘记导入jar包了
还有就是在Webroot下面见一个文件夹,我的名字是upload
JSP
<form action="show1.do" method="post" enctype="multipart/form-data">
<p>
姓名:
<input name="name" />
</p>
<p>
性别:
<input name="gender" type="radio" value="男" checked="checked" />
男
<input name="gender" type="radio" value="女" />
女
</p>
<p>
头像:
<input name="img" type="file" />
</p>
<p>
<input type="submit" value="上传" />
</p>
</form>
Controller
@RequestMapping("show1.do")
public String filesUpload1(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (!ServletFileUpload.isMultipartContent(request)) {
// 不是二进制格式,程序终止
return null;
}
Img img = new Img();
try {
// 实例化获得工厂类
FileItemFactory factory = new DiskFileItemFactory();
// 获得上传操作类
ServletFileUpload upload = new ServletFileUpload(factory);
// 获得表单项
List<FileItem> list = upload.parseRequest(request);
// 遍历所有发送到请求中的表单控件
for (FileItem fi : list) {
// 如果不是文件域
if (fi.isFormField()) {
// 判断表单的name属性值
if (fi.getFieldName().equals("name"))
// 根据属性值来赋值
img.setName(fi.getString("utf-8"));
if (fi.getFieldName().equals("gender"))
img.setGender(fi.getString("utf-8"));
} else {
// 如果是文件域
//使用是偏移量和随机数生成文件名,降低文件名重复几率
String filename = "" + System.currentTimeMillis()
+ (int) (Math.random() * 1000000);
//在文件吗名之后追加文件的后缀名
filename += fi.getName().substring(
fi.getName().lastIndexOf("."));
//获得服务器所在的真实路径
String path = request.getSession().getServletContext()
.getRealPath("upload");
//System.out.println(path + "\\" + filename);
//将文件上传
fi.write(new File(path +"\\"+ filename));
img.setImgurl(filename);
}
}
System.out.println(list);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("*****************************");
System.out.println("姓名"+img.getName()+"性别"+img.getGender()+"照片地址"+img.getImgurl());
System.out.println("*****************************");
return "index.jsp";
}
这样得代码直接复制运行,看一下效果
如果想让图片在上传的时候看一下
在Script中加入以下代码
<script type="text/javascript">
function showImage() {
var docObj = document.getElementById("doc");
var imgObjPreview = document.getElementById("preview");
if (docObj.files && docObj.files[0]) {
//火狐下,直接设img属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '300px';
imgObjPreview.style.height = '120px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
} else {
//IE下,使用滤镜
docObj.select();
var imgSrc = document.selection.createRange().text;
var localImagId = document.getElementById("localImag");
//必须设置初始大小
localImagId.style.width = "250px";
localImagId.style.height = "200px";
//图片异常的捕捉,防止用户修改后缀来伪造图片
try {
localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
} catch (e) {
alert("您上传的图片格式不正确,请重新选择!");
return false;
}
imgObjPreview.style.display = 'none';
document.selection.empty();
}
return true;
}
</script>
并且在form表单中加入
<div id="localImag">
<img id="preview" width=-1 height=-1 style="diplay:none" />
</div>