博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
base64上传图片
阅读量:4663 次
发布时间:2019-06-09

本文共 1650 字,大约阅读时间需要 5 分钟。

PC端上传图片

基本结构

  1. form[enctype="multipart/form-data"]
  2. input[type="file"]
  3. 上传完毕后,获取图片url,显示到页面上

问题

  1. 图片要上传完毕后,才能显示
  2. 压缩上传

H5 如何解决

  1. FileReader
  2. canvas

FileReader

FileReader可以将File对象转化成base64,这样可以优先展示图片,然后处理上传操作。

1 var fr = new FileReader();2 fr.readAsDataURL(file);3 fr.onload = function(e) {4     $('img').attr('src', e.target.result);5 };

FormData

实际的上传操作,大多是ajax处理的,FormData可以用来构建form表单。

var fd = new FormData(); fd.append('filename', file);$.ajax({     url: 'xxxx/yyyy',     data: fd,     type: 'POST',     cache: false,     processData: false,     contentType: false,     dataType: 'json',     success: function(data) {     },     error: function() {     }});

canvas

手机的流量是宝贵的,但是上传个一张照片可能有几M,所有需要对图片进行压缩处理,canvas对图片的操作是通过base64格式处理的。

var img = new Image();img.src = base64;img.onload = function(){    var canvas = document.createElement('canvas');    canvas.width = img.naturalWidth;    canvas.height = img.naturalHeight;    canvas.getContext("2d").drawImage(img, 0, 0);    var compressBase64 = cvs.toDataURL(mime_type, quality / 100);}

上传base64

使用mqq接口拍照或者获取本地图片时,反馈都是base64格式,input在处理过程中,经过压缩等操作也可能将File对象转化成base64,对base64的上传支持有以下方案:

  1. server支持,单独开接口处理base64上传
  2. 前端将base64转化成File对象,复用原来的server接口

这里重点讨论第2中方案。 JS提供了Blob对象,是一个类文件对象,File对象继承了Blob对象,并且做了一些扩展。 基于此,只需要把base64转化成Blob对象即可。Blob的构造参考  ,可以使用类型数据来处理。

// 解码base64var byteString = atob(dataURI.split(',')[1]);var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];// 类型数组var ia = new Uint8Array(byteString.length);for (var i = 0; i < byteString.length; i++) {    ia[i] = byteString.charCodeAt(i);}return new Blob([ia], {    type: mimeString});

 

转载于:https://www.cnblogs.com/myclovers/p/5845697.html

你可能感兴趣的文章
【5集iCore3_ADP演示视频】5-5 iCore3应用开发平台示波器和信号源校准
查看>>
前端模块化js
查看>>
ltrim、rtrim与trim 去除空格或者别的字符
查看>>
k8s cookbook读书笔记 第二章
查看>>
hdu 3709+hdu 3555(数位dp)
查看>>
Go学习笔记(3)字符串
查看>>
挑战编程题(三)
查看>>
Linux下的crontab定时执行任务命令详解
查看>>
iOS开发init方法解析
查看>>
ValueListEdit控件的用法
查看>>
Python的主成分分析PCA算法
查看>>
day04-Linux系统中用户控制及文件权限管理方法
查看>>
go语言操作mongodb
查看>>
java定时器的使用
查看>>
es6学习笔记
查看>>
PAT 1043. 输出PATest
查看>>
Angular4 后台管理系统搭建(6) - 和D3.js V4版本结合画图
查看>>
《DSP using MATLAB》Problem 5.31
查看>>
HttpWebRequest解析 作用 介绍
查看>>
阿里云 centos vim 显示中文 乱码
查看>>