js图片上传(配合七牛云)

在这里插入图片描述
我是用bootstrap+layer+jQuery做的,一些样式使用了bootstrap和layer的样式,如果不使用这两个框架可以自行修改样式。这篇博客主要是说功能实现。

上传操作主要是通过input来实现的

<input type="file" id="cardFileupload" class="x-file" accept="image/*" />

效果如下图:
在这里插入图片描述
因为上传input的样式并不好看,我们也无法修改其样式,所以就想了一个办法:用一个按钮代替这个input执行上传操作,主要实现方式是想办法隐藏input框,在点击按钮的时候让它去触发input的方法。

<!-- 上传图片 -->
<div id="box">
	<div class="form-group">
	    <label class="col-sm-3 control-label">图片:</label>
	    <div class="col-sm-9">
	    	<!--选择图片按钮-->
	        <button id="btnCardAdd" class="btn btn-primary" type="button" onclick="document.getElementById('cardFileupload').click();"><i class="fa fa-plus"></i>&nbsp;&nbsp;选择图片</button>
	        <!--实际执行上传操作-->
	        <input type="file" id="cardFileupload" class="x-file"  onchange="parts_manage.loadLocalImage(this,'cardImage',0);" accept="image/*"/>
	    </div>
	</div>
	<div class="form-group">
	    <label class="col-sm-3 control-label"></label>
	    <div class="col-sm-9">
	    	<!--图片展示区域-->
           <ul id="uploadImgBox"></ul>
	    </div>
	</div>
</div>

在这里插入图片描述
页面结构和样式好了之后我们就开始写功能了。
我首先是把图片上传至七牛云拿到一个图片地址之后,再去往页面上添加标签。

//点击按钮触发此方法,用于图片上传
loadLocalImage: function(fileObject, imageID, imageType) {
    if(typeof FileReader == 'undefined') {
        alert("当前浏览器不支持FileReader接口");
        return;
    }
    var file = fileObject.files[0];
    let reader = new FileReader() ;//新建一个FileReader对象
    reader.readAsDataURL(file) ;//将读取的文件转换成base64格式
    reader.onload = function(e) {
        var bytes = window.atob(e.target.result.split(',')[1]); //去掉url的头,并转换为byte
        //处理异常,将ascii码小于0的转换为大于0
        var ab = new ArrayBuffer(bytes.length);
        var ia = new Uint8Array(ab);
        for (var i = 0; i < bytes.length; i++) {
            ia[i] = bytes.charCodeAt(i);
        }
        //获取图片的blob对象,因为上传至七牛云需要blob对象
        var blobData = new Blob([ab], {
            type: 'image/png'
        });
        // 图片上传至七牛云
        parts_manage.qiniuUpload(
            blobData,
            file.name,
            $('#uploadImgBox')
        );
    }
},
/**七牛云上传图片
 * cardImageUrl-----需要上传图片的bolb地址
 * fileName-----上传图片的原文件名
 * nodeObj------显示图片的盒子
 * */
qiniuUpload: function(cardImageUrl, fileName, nodeObj) {
	//获取七牛云token,这个需要请求后台接口获得
    $.ajax({
        url: win.utils.services.getQiniuToken,
        type: 'get',
        dataType: 'json',
        success: function (res) {
            var qiniuToken = res.token;
            //拿到token之后,请求七牛云,将图片上传至七牛云
            var observable = qiniu.upload(
                cardImageUrl, //上传图片的blob对象
                fileName, //图片名
                qiniuToken, //token
                {
                    fname: fileName,
                    params: {}, //用来放置自定义变量
                    mimeType: null
                }, {
                    useCdnDomain: true,
                    region: qiniu.region.z0
                }
            );
            observable.subscribe({
                complete(res) {
                	//图片上传成功之后,获取图片地址,添加到img标签的src内,连同其他标签元素一起追加到图片显示区域
                    var qiniuImgUrl = '在七牛云网站上创建的存储空间名称地址'+res.key;
                    nodeObj.append('<li>\n' +
                        '<img class="cardImage" style="margin-top: 10px; width: 100px; height: 100px; max-width: 400px; border: 10px solid #EEEEEE;" src='+qiniuImgUrl+' />\n' +
                        '<span class="layui-layer-setwin"><a class="layui-layer-ico layui-layer-close layui-layer-close1" href="javascript:;"></a></span>\n' +
                        '</li>');
                }
            });
        }
    });
},

删除图片方法:
查了一些资料发现js好像没有办法直接删除上传至七牛云的图片,需要后台写接口去做这个操作,所以我这里只写了删除显示的图片。

// 删除上传图片
$('#uploadImgBox').on('click','span',function () {
    $(this).parents('li').remove();
});

上传多个图片也可以实现:
在这里插入图片描述

js上传图片到七牛云参考:https://developer.qiniu.com/kodo/sdk/1283/javascript
后台获取七牛云token:https://www.jianshu.com/p/f71349f4762a

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值