图片上传之前的预览

这几天公司看到公司的文件上传使用的是上传成功之后从服务器上取路径的方式作为预览的,本人感觉这种方式不是很合理,于是自己尝试了一下,将预览的功能记录下来,作为纪念。


说明,该功能是通过网上一哥们上传的一个上传预览的文件修改而来的,因此要感谢他的无私奉献。这是他的原版地址

http://sundoctor.iteye.com/blog/1943278


功能说明:通过file表单实现文件上传,如果通过浏览器直接获取本地的图片路径作为会有问题,浏览器禁止加载本地硬盘的路径,于是问题就在于如何解决浏览器读取本地文件的问题,通过阅读上面的帖子,确实看到了,解决这个问题的办法,我所做的只是去掉了其中多余的校验,将路径的转换功能保留下来了。


jsp代码:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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>Insert title here</title>
<script type="text/javascript" src="jquery-1.11.1.js"></script>
<script type="text/javascript" src="myprivew.js"></script>
  <script type="text/javascript">
   function showpic(obj)
   {
  $("#imgs").attr("src",getPreviewPath(obj));
   }
  </script>


</head>
<body>
<form action="fileUpload.action" method="post" enctype="multipart/form-data">
        file1: <input type="file" name="file" οnchange="showpic(this);">
        <img alt="" src="" id="imgs"/><br>
        <input type="submit" value="submit">
    </form>
</body>
</html>

唯一需要说明的是为file表单添加的change事件,主要是为了拿到本地硬盘的文件数据源头。


js代码代码如下(myprivew.js中getPreviewPath方法具体实现)

function getPreviewPath(obj)
{
var file = null;   
    var size = 0; 
    var path="";
    try{      
        if(obj.files && obj.files[0] ){   
            file = obj.files[0];    
            //size = file.size;   //文件大小,此处可以用它校验上传图片的大小限制
        }else if(obj.files && obj.files.item(0)) {                                   
            file = obj.files.item(0);      
           // size = file.fileSize;   
        }    
        //Firefox 因安全性问题已无法直接通过input[file].value 获取完整的文件路径   
        try{   
            //Firefox7.0 以下                                
            path = file.getAsDataURL();
        }catch(e){   
            //Firefox8.0以上                                 
            path = window.URL.createObjectURL(file);
        }   
    }catch(e){                             
        //支持html5的浏览器,比如高版本的firefox、chrome、ie10   
        if (obj.files && obj.files[0]) {                             
//            if((obj.files[0].size/1024) > opts.maxSize){   
//                alert('图片大小不能超过'+opts.maxSize+'K');   
//                return "";   
//            }   
            var reader = new FileReader();    
            reader.onload = function (e) {                                         
            path = e.target.result;     
            };   
            reader.readAsDataURL(obj.files[0]); 
        }     
    }
    return path;
}


经过调试,在360上没有发现问题。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值