近期,由于项目需求需要上传图片logo,笔者在探索的过程中遇到过很多坑,今晚就把个人经验分享出来尽量少让博友们脑壳疼
不多bb 直接上硬菜
1.前端代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script><script charset="utf-8" src="js/kindeditor/kindeditor-all.js"></script>
<script charset="utf-8" src="js/kindeditor/lang/zh-CN.js"></script>
<script type="text/javascript" src="js/webuploader.min.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>图片新闻</title>
<script type="text/javascript">
function B(){
window.location.reload();
}
</script>
<script type="text/javascript">
//下面用于多图片上传预览功能
function setImagePreviews(avalue) {
var docObj = document.getElementById("doc");
var dd = document.getElementById("dd");
dd.innerHTML = "";
var fileList = docObj.files;
var tishi = "";
for (var i = 0; i < fileList.length; i++) {
dd.innerHTML += "<div style='float:left' > <img id='img" + i + "' /> </div>";
var imgObjPreview = document.getElementById("img"+i);
if (docObj.files && docObj.files[i]) {
if(docObj.files[i].size>20*1024*1024){
tishi+="第"+Number(i+1)+"张图片过大,图片上传限制为20M;";
continue;
}
//火狐下,直接设img属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '200px';
imgObjPreview.style.height = '150px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
imgObjPreview.src = window.URL.createObjectURL(docObj.files[i]);
}
else {
//IE下,使用滤镜
docObj.select();
var imgSrc = document.selection.createRange().text;
alert(imgSrc)
var localImagId = document.getElementById("img" + i);
//必须设置初始大小
localImagId.style.width = "200px";
localImagId.style.height = "150px";
//图片异常的捕捉,防止用户修改后缀来伪造图片
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();
}
}
if(tishi!=""){
alert(tishi);
}
return true;
}
function show(obj){
// document.getElementById("d").innerHTML = "显示需要组装的信息";
// window.open ("page.html", "newwindow", "height=100, width=400, toolbar= no, menubar=no, scrollbars=no, resizable=no, location=no, status=no")
//window.open('index2.jsp?p1=2','_blank');
var x = window.screen.height;
var y = window.screen.width;
var h = 500;
var w = 800;
var model="title=word,resizable=yes,scrollbars=yes,height="+h+",width="+w+",status=yes,toolbar=no,menubar=no,location=no,to="+ (x-h)/2 + ",left=" + (y-w)/2;
var url = "";
url = "/zkx/jsp/PangZhan/PZAddimg.jsp";//弹出窗口的页面内容
var oOpen = window.open(url,"adviceDetail",model);
oOpen.focus();
}
</script>
<script type="text/javascript">
//KindEditor脚本
var editor;
KindEditor.ready(function(K) {
editor = K.create('#kindEditor_demo', {});
editor.sync();//将KindEditor的数据同步到textarea标签。
var value_content = $("#text_new_continue").val();
});
</script>
</head>
<body style="text-align: center">
<table>
<form id="form1" action="/find/doupload" accept-charset="utf-8" οnsubmit="document.charset='utf-8';" method="post" enctype="multipart/form-data">
<td>
标题:<input type="text" id="name" name="name"><br/>
<textarea id="text1" name="texttt" οnblur="zounia()"></textarea>
<input type="file" name="file" id="doc" multiple="multiple" name="photo" style="width:150px;" οnchange="javascript:setImagePreviews();" accept="image/*" />
<div id="dd" style=" width:500px;"></div>
<input type="submit" id="add" width="300px" value="保存" />
<input type="button" id="ESC" width="300px" value="取消" οnclick="B()"/>
<input type="button" class="button" id="fh" value="返回上一级" οnclick="javascript:window.history.go(-1)">
</td>
<!-- <td><img src="${pageContext.request.contextPath}/resource/images/f0790c67845d496b882cec27babcde72.jpg" alt="" style="width: 20%"></td> -->
</table>
</form>
</div>
</body>
</html>
</body>
</html>
2.Controller
@RequestMapping("/doupload")
public String imageUploa(@RequestParam("file") MultipartFile[] file,HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IllegalStateException, IOException{
List list = new ArrayList();
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
FileUtils imageUtil = new FileUtils();
// String images = imageUtil.ImageUpload(file, request,response,session);
if(file!=null&&file.length>0){
//循环获取file数组中得文件
for(int i = 0;i<file.length;i++){
MultipartFile files = file[i];
//保存文件
String amageurl = imageUtil.ImageUpload(files, request, response, session);
//D:\apache-tomcat-8.0.9\webapps\srowa\resource\images15312226457765.jpg
String substring = amageurl.substring(48);
System.out.println(name+substring);
list.add(amageurl);
}
}
return "redirect:/find/list";
}
3.util
public String ImageUpload(MultipartFile file,HttpServletRequest request,HttpServletResponse response,HttpSession session)
throws IllegalStateException, IOException{
String savePaths ="";
if (file!=null) {// 判断上传的文件是否为空
// String path="";// 文件路径
String type=null;// 文件类型
String fileName=file.getOriginalFilename();// 文件原名称
//System.out.println("上传的文件原名称:"+fileName);
// 判断文件类型
type=fileName.indexOf(".")!=-1?fileName.substring(fileName.lastIndexOf(".")+1, fileName.length()):null;
if (type!=null) {// 判断文件类型是否为空
if ("GIF".equals(type.toUpperCase())||"PNG".equals(type.toUpperCase())||"JPG".equals(type.toUpperCase())) {
// 项目在容器中实际发布运行的根路径
String realPath=request.getSession().getServletContext().getRealPath("/resource/images/");
// 自定义的文件名称
String trueFileName=String.valueOf(System.currentTimeMillis())+fileName; //15312196403485.jpg
// 设置存放图片文件的路径
String path=realPath+/*System.getProperty("file.separator")+*/trueFileName;
/* imageuploads.setTrueFileName(trueFileName);
System.out.println(imageuploads.getTrueFileName());
img.setImgname(imageuploads.getTrueFileName());
System.out.println(img.getImgname());
imgMapper.addimg(img);*/
// 转存文件到指定的路径
file.transferTo(new File(path));
savePaths =path;
}else {
System.out.println("不是我们想要的文件类型,请按要求重新上传");
return null;
}
}else {
System.out.println("文件类型为空");
return null;
}
}else {
System.out.println("没有找到相对应的文件");
return null;
}
return savePaths;
}