H5图片预览及上传

web上传图片很简单,网上有许多的demo和js,但是本人嫌弃用那些会引入许多js包,所以还是用原生的jquery来写吧。

一、html布局文件

html有一个自己的上传文件控件---input,只需要将其type属性设置为file即可上传文件,accept=“image/”是用来限制文件类型为image,input代码如下:

 <input class="input-upload" type="file" accept="image/*"  name="pic" >

之后,我们还需要一个image标签来存放图片的预览:

<img v-bind:src="demand.image" /> //v-bind是vue.js的用法,将src的属性绑定为demand.image,可支持动态改变src的值,减少dom操作

完整的html代码:

<div id="ImageUploader" data-vpid="<%-VPID%>" data-vpcon="`{MODURL}`.js">
<div class="filearea"><span class="btn-upload icon-enclosure"><input class="input-upload" type="file" accept="image/*"  name="pic" ></span><div class="preview" ><i class="hide"></i><img v-bind:src="demand.image" /><div class="remove icon-delete"></div></div>
</div>
</div>

二、css样式

对应的css样式:

@import "src/node_modules/views/global/sass/mixin";#ImageUploader {position: relative;.btn-upload {position: relative;overflow: hidden;width: 1.57rem;height: 1.05rem;border: solid 1px $blue;display: table-cell; vertical-align: middle;text-align: center;color: $blue;z-index: 20;margin-top: 10px;margin-left: 15px;}.input-upload {position: absolute;top: 0;right: 0;margin: 0;opacity: 0;-ms-filter: 'alpha(opacity=0)';cursor: pointer;direction: ltr;font-size: 200px !important;  /* 为了能点中,弄个超大字号 */}.preview {position: absolute;}img {max-width: 1.57rem;max-height: 1.05rem;}.remove {position: absolute;top: -8px;right: -8px;z-index: 10;width: 0.16rem;height: 0.16rem;border-radius: 50%;color: white;background: $blue; font-size: 0.11rem;text-align: center;padding-top: 2px;}
}

三、TS代码

本人的用的是TS写的,编辑器可以自动将TS转化为JS,图片的预览有两种方法,一是根据input获取html5 JS对象;而是根据file对象生成一个图像URL,即下面代码中的function1和function2

import * as tomato from "@po-to/tomato";
import * as project from "views/global/common/Project";
import * as funs from "views/global/common/Funs";
import * as model from "views/global/common/Model";
import * as Vue from "vue";
import css = require("./css");    //在js中引入css样式
import * as api from "views/global/common/API";class VPresenter extends project.VPresenter {/**模块 */private ImageUploader_vue: any;/**预览图片 */private img;private preview;/**input控件 */private inputUpload;private btnUpload: JQuery;/**demand */private demand;// private form;constructor(view: tomato.VPView, parent?: tomato.VPresenter, vpid?: string) {super(view, parent, vpid);var aaa = css;//hackvar user = model.globalData.user;var demand = this.demand = model.globalData.demand;var that = this;
//取到html中的元素
this.preview = this.find(".preview");this.btnUpload = this.find(".btn-upload ");this.inputUpload = this.find(".input-upload");/**删除预览 */this.preview.on('click', function () {that.demand.image = '';that.setImg();});/**预览上传图片 */this.inputUpload.on('change', function (event) {// 根据这个 <input> 获取文件的 HTML5 js 对象var files = event.target.files, file;if (files && files.length > 0) {// 获取目前上传的文件file = files[0];// 来在控制台看看到底这个对象是什么console.log(file);// 那么我们可以做一下诸如文件大小校验的动作if (file.size > 1024 * 1024 * 2) {alert('图片大小不能超过 2MB!');return false;}// 图片预览 function 1if (window['FileReader']) {var reader = new FileReader();} else {alert("您的设备不支持图片预览功能,如需该功能请升级您的设备!");}var reader = new FileReader();var imageType = /^image\//;//是否是图片if (!imageType.test(file.type)) {alert("请选择图片!");return;}//读取完成reader.onload = function (e) {//图片路径设置为读取的图片that.demand.image = this.result;};reader.readAsDataURL(file);// 图片预览 function 2// 下面是关键的关键,通过这个 file 对象生成一个可用的图像 URL// 获取 window 的 URL 工具// var URL = window.URL || window['webkitURL'];// 通过 file 生成目标 url// var imgURL = URL.createObjectURL(file);// 用这个 URL 产生一个 <img> 将其显示出来// demand.image = imgURL;// 使用下面这句可以在内存中释放对此 url 的伺服,跑了之后那个 URL 就无效了// URL.revokeObjectURL(imgURL);
that.fileUpload(file);//预览出现后调用上传方法,传值为一个file对象,也可以传demand.image预览地址,看服务器那边怎么要求的}});this.setImg();//this._watchEvent();}/** 初始化*/private setImg() {/**是否有图片 */if ("" == this.demand.image) {this.preview.addClass("hide");this.btnUpload.removeClass("hide");} else {this.btnUpload.addClass("hide");this.preview.removeClass("hide");}}/**上传文件,参数:订单id和文件对象 */private fileUpload(file) {var that=this;var demand_id = this.demand.id;var formData = new FormData();formData.append('demand_id', demand_id);formData.append('file', file);$.ajax({xhrFields: {withCredentials: true},//ajx请求时带上cookieurl: 'http://dev.v2.api.wanpinghui.com/Img/uploadDemandPlaceImage',type: 'POST',cache: false,data: formData,processData: false,contentType: false}).done(function (json) {console.log("::"+json.image);model.globalData.demand.image = json.image;}).fail(function (json) { });}
}
export = VPresenter;

H5图片预览及上传(WEB前端)相关推荐

  1. axios获取图片显示_Vue.js+axios图片预览以及上传显示进度

    在平时项目开发中,我们经常会对文件做一些上传操作,不仅仅要实现基本需求,也要兼顾用户体验,根据自己在工作中遇到的问题谈谈对图片上传的预览以及上传进度的优化. 1.搭建项目 基于Vue.js+axios ...

  2. 技术干货 | “选图预览并上传”的场景如何解?全网最全方案汇总来了

    简介: 你真的知道如何"上传"一张照片吗? 选择本地相册图片或者拍照,然后预览并且上传是移动应用中一个典型的使用场景,比如常见的身份证信息上传等. 不少客户都反馈有类似的场景,并且 ...

  3. 【微信小程序】图片选择、转码、压缩、预览、上传,file与base64

    0 前言 微信小程序中,上传图片,如标题,涉及图片选择.图片转码.图片压缩.图片预览.图片上传等 1 图片选择 需要使用微信提供的wx.chooseMedia chooseImage() {var t ...

  4. element upload预览_element-ui上传组件图片默认不上传显示图片缩略图

    新入职公司,新团队实训练手项目,后端没有提供单独的图片上传接口,需要用form/data 形式表单字段和图片文件一起提交,element UI 的上传组件默认需要启用action. 在选取图片文件后为 ...

  5. 点击/拖拽两种方式,预览并上传png/jpg/jpeg格式图片

    <template><div class="content"><div class="PictureBox"><img ...

  6. js预览待上传的本地图片

    來源:http://www.cnblogs.com/conquer/archive/2008/03/22/1117367.html <input id="file" type ...

  7. 移动端HTML5 文件预览及上传

    本文主要介绍使用HTML5 图片上传及上传前的预览.本人是做PHP后端的,由于前端有时也需要自己写,有空就研究了下图片上传预览,写的都是原生代码,废话不多说,直接上代码. 前端代码 <!DOCT ...

  8. 利用JS来进行多张图片的压缩、预览、上传

    JS多张图片压缩上传 前言 代码 结尾 前言 最近在做的项目里有个关于多图片上传的,搞得我很久,查了很多资料,终于搞定,故此写一篇总结. 代码 前台我用的是jquery-1.8.3.min.js ht ...

  9. android h5选择图片上传,js-微信H5选择多张图片预览并上传(兼容ios,安卓,已测试)...

    值得注意的是: 1.在微信H5中选择图片运用:wx.chooseImage, 上传图片:wx.uploadImage. 2.上传图片的时候务必是一张一张的上传的(建议采用递归) 3.一张图片上传成功后 ...

最新文章

  1. 比较全面的gdb调试命令
  2. max导出fbx设置_真3D虚拟偶像制作教程——虚拟偶像人物模型导出前的处理
  3. 嘘!偷偷教你们一个在双十一省钱的办法!
  4. 微信红包问题:找出某个出现次数超过红包总数一半的红包的金额(面试题)
  5. TensorFlow LeNet5
  6. 一篇文章搞懂filebeat(ELK)
  7. c#arcgis engine开发_湖南web开发学习网站要多久
  8. Android开发笔记(一百七十二)第二代翻页视图ViewPager2
  9. Python网络爬虫学习笔记(十):PyQuery库的使用
  10. acs712电流检测怎么用_工程师都用这个巧妙廉价的电流检测电路!
  11. ❀❀ 名词解释(PM、PD、UE、UI、RD....)
  12. 续招商、保利后,纬衡科技又签地产大鳄碧桂园
  13. pku 1276 Cash Machine 多重背包
  14. 12.06课堂笔记以及作业
  15. 大数据第一季--java基础(day2)-徐培成-专题视频课程
  16. 网络安全建设网络可用性管理方法
  17. 【计算机组成原理】二、静态随机存储器实验
  18. html中改变图标颜色,使用CSS更改图标的颜色
  19. win10偶尔打不开开始菜单(按win键和点击开始菜单都没反应)
  20. vue2 与 vue3 生命周期对比

热门文章

  1. 五个热门的免费Linux视频软件下载
  2. 绝大多数交互式电子白板与计算机通过链接,交互式电子白板实现了白板与计算机之间双向交互通信与操.ppt...
  3. C# WebApi
  4. 李宏毅课程-人类语言处理-BERT和它的家族-ELMo等(上)
  5. vmware虚拟机系统esxi不能识别不兼容网卡解决方案
  6. mac m1 搭建数据库mysql 5.7版本问题和解决方式
  7. 计算机主板的mtbf,图文 罗洪元:联想电脑MTBF指标不少于6万小时
  8. 新手做电商,怎么找到合适的快递合作方
  9. 频谱分析仪的工作原理
  10. SIP电话(一)之程控交换机-FreeSWITCH的使用总结