Java实现图片上传到服务器

近期,由于项目需求需要上传图片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;
    }

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值