图片转换base64编码,点击div的时候选择文件

有时候我们希望文件上传的时候预览图片,下面插件可以实现上传前预览图片 (也可以提取文件的base64编码)

max-height: 140px;max-width: 120px;可以指定图片的最大宽度和高度
复制代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="jquery.js" type="application/javascript;charset=utf-8"></script>
<style>
</style>
</head>
<body>
<!--src可以指定一个默认的背景图片-->
<img id="preview" style="width: 120px; height:140px;max-height: 140px;max-width: 120px;" src="">
<div class="btn upload">上传头像<input type="file" name="image_file" id="image_file" class="upload_pic" onchange="fileSelected('preview','image_file');"></div>
<!--显示base64编码-->
<input type="text" id="hidden_photo_base64" />


<script>
// common variables

var iBytesUploaded = 0;
var iBytesTotal = 0;
var iPreviousBytesLoaded = 0;
var iMaxFilesize = 1048576; // 1MB
var oTimer = 0;
var sResultFileSize = '';

function fileSelected(a, b) {
    var oFile = document.getElementById(b).files[0];
    // filter for image files
    var rFilter = /^(image\/bmp|image\/gif|image\/jpeg|image\/png|image\/tiff)$/i;
    if (!rFilter.test(oFile.type)) {
        document.getElementById('error').style.display = 'block';
        return;
    }
    // get preview element
    var oImage = document.getElementById(a);
    console.log(a);
    // prepare HTML5 FileReader
    var oReader = new FileReader();
    oReader.onload = function(e) {

        oImage.src = e.target.result;
        $("#hidden_photo_base64").val(e.target.result);
    };

    // read selected file as DataURL
    oReader.readAsDataURL(oFile);
}
</script>

</body>
</html>
复制代码

 效果:

 

 

有时候我们希望点击一个div的时候就可以实现选择图片的功能,也就是点击某个div的时候选择图片

 思路:我们将type="file"的input隐藏掉,同时在div的点击事件中触发input的点击事件即可。

 

复制代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="jquery.js" type="application/javascript;charset=utf-8"></script>
<style>
</style>
</head>
<body>
<!--src可以指定一个默认的背景图片-->
<div onclick="javascript:$('#image_file').click();" style="height: 200px;width: 200px;">
    <img id="preview" style="width: 120px; height:140px;max-height: 140px;max-width: 120px;" src="">
</div>

<input type="file" name="image_file" id="image_file" class="upload_pic" onchange="fileSelected('preview','image_file');" style="display: none;"/>
<input type="text" id="hidden_photo_base64" />


<script>// common variables
var iBytesUploaded=0;
var iBytesTotal=0;
var iPreviousBytesLoaded=0;
var iMaxFilesize=1048576; // 1MB
var oTimer=0;
var sResultFileSize='';
function fileSelected(a, b) {
    var oFile=document.getElementById(b).files[0];
    // filter for image files
    var rFilter=/^(image\/bmp|image\/gif|image\/jpeg|image\/png|image\/tiff)$/i;
    if(!rFilter.test(oFile.type)) {
        document.getElementById('error').style.display='block';
        return;
    }
    // get preview element
    var oImage=document.getElementById(a);
    console.log(a);
    // prepare HTML5 FileReader
    var oReader=new FileReader();
    oReader.onload=function(e) {
        oImage.src=e.target.result;
        $("#hidden_photo_base64").val(e.target.result);
    }
    ;
    // read selected file as DataURL
    oReader.readAsDataURL(oFile);
}</script>

</body>
</html>
复制代码

 

结果:

触发一个元素的点击事件的时候有  jQueryEle.click();

第二种触发的办法是:    jQueryEle.trigger('click');

 

补充:今天想着用input限定文件类型以及前台获取文件名等操作

              <div class="layui-input-inline">
                  <input type="text" onclick="$('#videoFile').click();" lay-verify="required"
                  autocomplete="off" class="layui-input" />
                 <!--隐藏的div  -->
                <input type="file" name="file" id="videoFile" style="display: none;" onchange="checkfile(this)"/>
              </div>

JS获取文件内容:

        function checkfile(obj){
            var files = $(obj).prop("files");
            var file = files[0];
            console.log(files);
        }

console控制台查看可以获取到的文件信息如下:(重要的参数有:name、size、type)

 

于是可以用input的  accept="video/*"   属性限制文件类型是视频类型,并且在选中文件之后显示文件名:

              <div class="layui-input-inline">
                  <input type="text" onclick="$('#videoFile').click();" lay-verify="required"
                  autocomplete="off" class="layui-input" />
                 <!--隐藏的div  -->
                <input type="file" name="file" accept="video/*" id="videoFile" style="display: none;" onchange="checkfile(this)"/>
              </div>

 

        function checkfile(obj){
            var files = $(obj).prop("files");
            var file = files[0];
            var fileName = file.name;
            $("#videoFileNameDisplay").val(fileName);
        }

 

posted @   QiaoZhi  阅读(798)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2017-11-30 【GC分析】Java GC日志查看
2017-11-30 【eclipse】eclipse启动优化&打印GC信息&重要的堆结构连接
点击右上角即可分享
微信分享提示