照片上传预览并保存的功能

一、现在jsp中定义一个上传文件的form表单

<form id="imgForm" action="" method="post" enctype="multipart/form-data">
        <p class="upload clearfix">

             <!-- 其中 真正的上传input隐藏在了上传照片的下面,这样可以给上传按钮自定义样式,大小与外层样式一致 -->
             <input type="file" name="picFile" id="imgUrl" οnchange="changepic(this)" 

                         style="overflow: hidden;position: absolute;left:   75px;margin-top: 20px;float: left;width: 74px;height: 74px;">
            <a href="###" id="showFile" style="position: relative;"><i></i><span>上传照片</span></a>
            <b><img id="img" src=""></b>  <!-- 展示上传之后的图片 -->
        </p>

        <!--传递手机号,作为该用户存放照片的文件夹 -->
        <input name="imgMobile" type="hidden" value="<%=mobile1%>" id="imgMobile">   

       <!-- 传递自定义照片的名称(不重复) -->
        <input name="imgName" type="hidden" value="" id="imgName"> 
    </form>

二、在js当上传图片后异步提交表单

//捕获上传文件状态
function changepic(){

    //ie9及以下不兼容这个fileReader();
     var reads= new FileReader();
     file = document.getElementById('imgUrl').files[0];
     reads.readAsDataURL(file);
     reads.οnlοad=function (e) {
         var fileName = $("#imgUrl").val();
         var fileType = fileName.substring(fileName.lastIndexOf(".")+1);
         if(fileType=="jpg" || fileType=="JPG" || fileType=="jpeg" || fileType=="JPEG" || fileType=="png" || fileType=="PNG"){
             var filename = 'thjdpx' + (Math.random()+'').substr(2) + "." + fileType; //动态生成图片的名字,用于后期存到数据库中
             $("#imgName").val(filename);
             var formData = new FormData(document.getElementById("imgForm"));
            //使用ajax异步提交表单的时候的参数data要设置成formData,要按照这样写,否则后台接收不到上传的文件 

            $.ajax({
                type : "POST",
                url : "/patch/thjdpx/action/thjdpxPeOfflineTraineeInfo_saveOfflineTraineeImg.action", //调用保存图片的方法
                data: formData,
                async: false,
                cache: false,
                contentType: false,
                processData: false,
                dataType : 'json',

                error: function(request) {
                    $("#message").html("照片上传失败。");
                    $("#eject").show();
                },
                success: function(data) {
                    //data = eval("(" + data + ")");
                    if(data.success == "true"){
                        $("#img").attr('src',data.imgPath);
                        $("#imgUrl1").val(data.imgPath);        
                    }else{
                        $("#img").attr('src',data.imgPath);
                        $("#imgUrl1").val(data.imgPath);
                        $("#message").html("照片上传失败。");
                        $("#eject").show();
                    }
                }
            })
         }else{
             $("#message").html("请上传jpg、png、jpeg格式的文件。");
             $("#eject").show();
         }
     };
}

三、java代码中的写法,上传图片的方法

    /**
     * 上传照片的方法
     * 返回图片在服务器中的路径和上传状态
     */
    public String saveOfflineTraineeImg(){
        HttpServletRequest request = ServletActionContext.getRequest();
        Map<String, String> map = new HashMap<String, String>();
        String imgMobile = request.getParameter("imgMobile");    //获取表单中的手机号
        String imgName = request.getParameter("imgName");   

       //定义服务器中存放图片的文件夹路径,为减少一个文件夹的承载能力,这个给每个学员创建了一个自己的文件夹,图片上传到自己所在的文件夹中。
        String filePath = "/incoming/export/" + imgMobile ;   
        String realPath = ServletActionContext.getServletContext().getRealPath(filePath);
        String imgPath = "";
        map.put("success", "false");
        map.put("message", "上传失败。");
        //文件上传使用的组件,先创建一个工厂然后获取
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // 负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem 对象中
        ServletFileUpload upload = new ServletFileUpload(factory);
        if(StringUtils.isNotBlank(imgMobile)){
            try {
                request.setCharacterEncoding("UTF-8");    //设置编码格式
                List<FileItem> items = upload.parseRequest(request);  //将表单的每个输入项存放到list表单中
                Iterator<FileItem> itr = items.iterator();
                while (itr.hasNext()) {    //循序表单传入的文件
                    FileItem item = (FileItem) itr.next();
                    //查看该学员的图片文件夹是否存在,不存在则创建此文件夹
                    File realFile = new File(realPath);
                    if  (!realFile .exists()  && !realFile .isDirectory())      
                    {
                        realFile.mkdirs(); //创建文件夹 ,多级目录一同创建
                    }
                    if (!item.isFormField()) {
                        //如果文件不为空
                        if(item.getName() !=null && !item.getName().equals("")) {
                             File tempFile = new File(item.getName());//获取上传的文件
                             File file = new File(realPath,imgName);//新建一个文件
                             try {
                                item.write(file);//将原文件写入新文件中    
                                imgPath = filePath + "/" + imgName;     //返回图片路径到jsp中,方便后期保存到数据库的操作
                                map.put("imgPath", imgPath);
                                map.put("success", "true");
                                map.put("message", "上传成功。");
                            } catch (Exception e) {                            
                                e.printStackTrace();
                            }             
                        }                
                    }
                }        
            } catch ( FileUploadException | UnsupportedEncodingException e1) {
                e1.printStackTrace();
            }
        }        
        this.setJsonString(JsonUtil.toJSONString(map));
        return "json";
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值