zoukankan      html  css  js  c++  java
  • H5 图片上传

    1.h5 图片异步上传

     (1) 异步上传input触发onchange事件的时候,就把图片上传至服务器。后台可能会返回图片的链接等信息,前台可以把图片信息展示给用户看。

     (2) 另一种情况可能需要前台自己重写提交(如下图): 显示图片的时候,添加一个type='hidden'的input框,用来存后台需要提交的东西(后台会返回,只需要用input存起来)

      

    2.h5 图片同步上传

      (1) 同步上传。把图片获取,预览出来。然后在提交服务器

    (代码)

    /**
    * tinyImgUpload
    * @param ele [string] [生成组件的元素的选择器]
    * @param options [Object] [对组件设置的基本参数]
    * options具体参数如下
    * path 图片上传的地址路径 必需
    * onSuccess(res) 文件上传成功后的回调 参数为返回的文本 必需
    * onFailure(res) 文件上传失败后的回调 参数为返回的文本 必需
    * @return [function] [执行图片上传的函数]
    * 调用方法
    * tinyImgUpload('div', options)
    */
    function tinyImgUpload(ele, options) {
    // 判断容器元素合理性并且添加基础元素
    var eleList = document.querySelectorAll(ele);
    if(eleList.length == 0){
    console.log('绑定的元素不存在');
    return;
    }else if(eleList.length>1){
    console.log('请绑定唯一元素');
    return;
    }else {
    eleList[0].innerHTML ='<div id="img-container" >'+
    '<div class="img-up-add img-item"> dsafa<span class="img-add-icon">+</span> </div>'+
    '<input type="file" name="files" id="img-file-input" multiple>'+
    '</div>';
    var ele = eleList[0].querySelector('#img-container');
    ele.files = []; // 当前上传的文件数组
    }

    // 为添加按钮绑定点击事件,设置选择图片的功能
    var addBtn = document.querySelector('.img-up-add');
    addBtn.addEventListener('click',function () {
    document.querySelector('#img-file-input').value = null;
    document.querySelector('#img-file-input').click();
    return false;
    },false)

    // 预览图片
    //处理input选择的图片
    function handleFileSelect(evt) {
    var files = evt.target.files;

    for(var i=0, f; f=files[i];i++){
    // 过滤掉非图片类型文件
    if(!f.type.match('image.*')){
    continue;
    }
    // 过滤掉重复上传的图片
    var tip = false;
    for(var j=0; j<(ele.files).length; j++){
    if((ele.files)[j].name == f.name){
    tip = true;
    break;
    }
    }
    if(!tip){
    // 图片文件绑定到容器元素上
    ele.files.push(f);

    var reader = new FileReader();
    reader.onload = (function (theFile) {
    return function (e) {
    var oDiv = document.createElement('div');
    oDiv.className = 'img-thumb img-item';
    // 向图片容器里添加元素
    oDiv.innerHTML = '<img class="thumb-icon" src="'+e.target.result+'" />'+
    '<a href="javscript:;" class="img-remove">x</a>'

    ele.insertBefore(oDiv, addBtn);
    };
    })(f);

    reader.readAsDataURL(f);
    }
    }
    }
    document.querySelector('#img-file-input').addEventListener('change', handleFileSelect, false);

    // 删除图片
    function removeImg(evt) {
    if(evt.target.className.match(/img-remove/)){
    console.log('3',ele.files);
    // 获取删除的节点的索引
    function getIndex(ele){

    if(ele && ele.nodeType && ele.nodeType == 1) {
    var oParent = ele.parentNode;
    var oChilds = oParent.children;
    for(var i = 0; i < oChilds.length; i++){
    if(oChilds[i] == ele)
    return i;
    }
    }else {
    return -1;
    }
    }
    // 根据索引删除指定的文件对象
    var index = getIndex(evt.target.parentNode);
    ele.removeChild(evt.target.parentNode);
    if(index < 0){
    return;
    }else {
    ele.files.splice(index, 1);
    }
    console.log('4',ele.files);
    }
    }
    ele.addEventListener('click', removeImg, false);

    // 上传图片
    function uploadImg() {
    console.log(ele.files);

    var xhr = new XMLHttpRequest();
    var formData = new FormData();

    for(var i=0, f; f=ele.files[i]; i++){
    formData.append('files', f);
    }

    console.log('1',ele.files);
    console.log('2',formData);

    xhr.onreadystatechange = function (e) {
    if(xhr.readyState == 4){
    if(xhr.status == 200){
    options.onSuccess(xhr.responseText);
    }else {
    options.onFailure(xhr.responseText);
    }
    }
    }

    xhr.open('POST', options.path, true);
    xhr.send(formData);

    }
    return uploadImg;
    }

  • 相关阅读:
    rancher2.x添加node的坑。
    k8s相关端口表-以及周边工具
    基于Helm和Operator的K8S应用管理的分享
    iptables -F 与 -X 区别
    ansible批量免秘登录
    keepalived工作原理和配置说明
    k8s使用nfs动态存储(已测试成功)
    ansible-playbook快速入门填坑
    Service Account和其secrets 作用和场景,看了不亏。。
    kubectl管理多个k8s集群
  • 原文地址:https://www.cnblogs.com/huancheng/p/9394928.html
Copyright © 2011-2022 走看看