图片上传并预览

前段时间需要进行一个图片上传的操作,虽然之前也操作过,但是一直没有时间整理归纳(没时间都是借口)。现在整理一个图片长传的功能。部分有参考其他博文。
前台主要是放在表格中,同其他信息一起添加的,预览就是通过上传文件后直接onchange()显现的。JSP代码:

<tr>
     <td>身份照片:</td>
     <td>
        <form id="uploadImageForm" action="${ctx}/upLoadxls.do" enctype="multipart/form-data" method="post" target="hiddenFrame">
        <input id="userImagePath" type="file" name="file1"  onchange="addUserImage()" > 
        </form>
     </td>
     <td>
        <div id="showImage"  class="bg-white none"  >
              <img id="personImage" alt="" src="" style="width:100px;height:100px;margin-left:50px">
        </div> 
     </td>
</tr>

对应于JSP的JS代码,主要是预览图片,我的图片就没有存储到文件中,而是直接放在项目中,但是对于图片比较大,且量比较多时,建议还是要放到本地的文件价中,或者压缩处理放到数据库中:

/**
 * 上传图片
 */
function addUserImage(){
    $("#uploadImageForm").ajaxSubmit({
        success:function(data){//图片上传成功时
        var t_div = document.getElementById("showImage");
        t_div.style.display = "block";                     data=data.replace("\"","").replace("\"","");            document.getElementById("personImage").src=ctx+"/personImage/"+data;             document.getElementById("userImagePath").name=data;
     },
     error:function(xhr){
          alert('预览失败!');            
           }
        });
}

后台处理上传代码,如上所说,我就是在webapp下新建了一个文件加,将图片保存在这里:

@RequestMapping(value = "/upLoadxls")
@ResponseBody
public String upLoadxls(final HttpServletRequest request) {
        // 得到上传文件的保存目录,将上传的文件存放于webapp目录下,不允许外界直接访问,保证上传文件的安全
        String savePath = request.getSession().getServletContext().getRealPath("/personImage");
        String fileName=null;
        File file = new File(savePath);
        // 判断上传文件的保存目录是否存在
        if (!file.exists() && !file.isDirectory()) {
            file.mkdir();// 如果文件夹目录不存在,则创建目录
        }
        try {
            // 使用Apache文件上传组件处理文件上传步骤:
            // 1、创建一个DiskFileItemFactory工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 2、创建一个文件上传解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 解决上传文件名的中文乱码
            upload.setHeaderEncoding("UTF-8");
            // 3、判断提交上来的数据是否是上传表单的数据
            if (!ServletFileUpload.isMultipartContent(request)) {
                // 按照传统方式获取数据
                return null;
            }
            // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
        List<FileItem> list = upload.parseRequest(request);
            for (FileItem item : list) {
                // 如果fileitem中封装的是普通输入项的数据
                if (item.isFormField()) {
                    String name = item.getFieldName();
                    // 解决普通输入项的数据的中文乱码问题
                    String value = item.getString("UTF-8");
                } else {
                    // 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
                    // c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
                    // 获取item中的上传文件的输入流
                    InputStream in = item.getInputStream();
                    //添加当前日期作为图片名,并且图片统一格式为png.
                    fileName=new Date().getTime()+".png";
                    // 创建一个文件输出流
                    FileOutputStream out = new FileOutputStream(savePath + "\\" + fileName);
                    // 创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    // 判断输入流中的数据是否已经读完的标识
                    int len = 0;
                    // 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
                    while ((len = in.read(buffer)) > 0) {
                        // 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
                        out.write(buffer, 0, len);
                    }
                    // 关闭输入流
                    in.close();
                    // 关闭输出流
                    out.close();
                    // 删除处理文件上传时生成的临时文件
                    item.delete();
                }
            }
        } catch (Exception e) {
            LOGGER.error(e.getMessage(),e);

        }
        //返回文件名
        return fileName;
    }

到此图片上传预览的功能就实现了。

在Vue中实现图片上传预览的过程如下: 首先,要在Vue项目中使用图片上传功能,需要在组件中添加一个文件上传input元素,并设置其类型为"file",同时在data中定义一个变量来保存上传的文件对象和预览图片URL。例如: ``` <input type="file" @change="handleImageUpload"> <img :src="previewImage" v-if="previewImage"> ``` 其次,在methods中,需要定义一个处理图片上传的函数。在函数中,首先获取用户选择的文件,并将其赋值给data中的变量。然后利用FileReader将文件转换成Data URL的形式,以便在浏览器端预览。最后,将转换后的URL保存在data中的变量中,以便在页面上进行预览。例如: ``` handleImageUpload(event) { const file = event.target.files[0]; this.image = file; const reader = new FileReader(); reader.onload = () => { this.previewImage = reader.result; } reader.readAsDataURL(file); } ``` 接下来,在data中定义一个用于保存预览图片的变量previewImage,并将其初值设置为null。这个变量会在上传文件并预览时使用。例如: ``` data() { return { image: null, previewImage: null } } ``` 最后,将上传的文件和预览图片URL绑定到页面上,以实现图片上传预览的功能。例如,在input元素中使用@change监听文件选择事件,然后调用handleImageUpload方法进行文件上传预览。在img元素中使用v-if指令判断预览图片的URL是否存在,如果存在,则显示预览图片。例如: ``` <input type="file" @change="handleImageUpload"> <img :src="previewImage" v-if="previewImage"> ``` 以上就是使用Vue实现图片上传预览的简单过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值