Ajax简单异步上传图片并回显

2023-11-04

前台代码

上传图片按钮

<a href="javascript:void(0)" onclick="uploadPhoto()">选择图片</a>

隐藏的文件选择器

<input type="file" id="photoFile" style="display: none;" onchange="upload()">

图片预览

<img id="preview_photo" src="" width="200px" height="200px">

去除图片预览未选择时默认时的边框

<style>
    img[src=""],img:not([src]){
        opacity:0;
    }
</style>

JavaScript部分

<script>
    function uploadPhoto() {
        $("#photoFile").click();
    }

    /**
     * 上传图片
     */
    function upload() {
        if ($("#photoFile").val() == '') {
            return;
        }
        var formData = new FormData();
        formData.append('photo', document.getElementById('photoFile').files[0]);
        $.ajax({
            url:"${pageContext.request.contextPath}/system/uploadPhoto",
            type:"post",
            data: formData,
            contentType: false,
            processData: false,
            success: function(data) {
                if (data.type == "success") {
                    $("#preview_photo").attr("src", data.filepath+data.filename);
                    $("#productImg").val(data.filename);
                } else {
                    alert(data.msg);
                }
            },
            error:function(data) {
                alert("上传失败")
            }
        });
    }
</script>

后台代码

    /**
     * 图片上传
     * @param photo
     * @param request
     * @return
     */
    @RequestMapping(value = "/uploadPhoto", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, String> uploadPhoto(MultipartFile photo, HttpServletRequest request) {
        Map<String, String> ret = new HashMap<String, String>();
        if (photo == null) {
            ret.put("type", "error");
            ret.put("msg", "选择要上传的文件!");
            return ret;
        }
        if (photo.getSize() > 1024 * 1024 * 10) {
            ret.put("type", "error");
            ret.put("msg", "文件大小不能超过10M!");
            return ret;
        }
        //获取文件后缀
        String suffix = photo.getOriginalFilename().substring(photo.getOriginalFilename().lastIndexOf(".") + 1, photo.getOriginalFilename().length());
        if (!"jpg,jpeg,gif,png".toUpperCase().contains(suffix.toUpperCase())) {
            ret.put("type", "error");
            ret.put("msg", "请选择jpg,jpeg,gif,png格式的图片!");
            return ret;
        }
        //获取项目根目录加上图片目录 webapp/static/imgages/upload/
        String savePath = request.getSession().getServletContext().getRealPath("/") + "/static/images/upload/";
        File savePathFile = new File(savePath);
        if (!savePathFile.exists()) {
            //若不存在该目录,则创建目录
            savePathFile.mkdir();
        }
        String filename = new Date().getTime() + "." + suffix;
        try {
            //将文件保存指定目录
            photo.transferTo(new File(savePath + filename));
        } catch (Exception e) {
            ret.put("type", "error");
            ret.put("msg", "保存文件异常!");
            e.printStackTrace();
            return ret;
        }
        ret.put("type", "success");
        ret.put("msg", "上传图片成功!");
        ret.put("filepath", request.getSession().getServletContext().getContextPath() + "/static/images/upload/");
        ret.put("filename", filename);
        return ret;
    }

转载于:https://www.cnblogs.com/yxmhl/p/11617497.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ajax简单异步上传图片并回显 的相关文章

随机推荐

  • 单片机c51中断 — 中断嵌套实例IE0的置位和撤销

    项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章 中断 根据下原理图 编程验证二级外部中断嵌套效果 其中K0定为低优先级中断源 K1为高优先级中断源 此外 利用发光二极管D1验证外部中断请求标志IE0在脉冲触发中断时
  • Javascript基础介绍与arguments对象,console对象,json对象详述

    Javascript基础 Javascript基础 前言介绍与引用 基础语法 基础逻辑控制语句 数据类型 对象 属性与方法的区别 数组 函数 典例 setTimeout 函数声明 构建 作用域 类型转换 温习对象概念 arguments 隐
  • 2022-2027年中国重工行业市场全景评估及发展战略规划报告

    报告格式 电子版 纸介版 出品单位 华经产业研究院 本报告由华经产业研究院出品 对中国重工行业的发展现状 竞争格局及市场供需形势进行了具体分析 并从行业的政策环境 经济环境 社会环境及技术环境等方面分析行业面临的机遇及挑战 还重点分析了重点
  • 【文献阅读】数据重采样+特征选择(1)

    目录 1 面向不均衡数据的多分类集成算法 1 1 两阶段采样 1 2 算法整体框架 1 3 实验 1 4 期刊 2 基于多阶段混合集成的中小企业信用风险评价 3 基于边界自适应SMOTE和FocalLoss函数改进LightGBM的信用风险
  • flask的安装与使用

    说明 最近的项目需要用到flask 貌似3年前用过 不过很久没搞了 以前java web比较熟 这里做个简单的入门记录 官网 http docs jinkan org docs flask 下载与安装 pip install flask 建
  • 云计算时代——本质、技术、创新、战略

    云计算时代 本质 技术 创新 战略 一线云计算布道师历时6年力作 透析云计算本质 简述云计算关键技术 分析主要云服务架构 解剖云计算巨头策略 既有广度又有深度 云计算2 0时代必备 刘黎明 王昭顺 著 ISBN 978 7 121 2318
  • [附源码]Python计算机毕业设计大学生网络安全题库系统Django(程序+LW)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行 环境配置 Pychram社区版 python3 7 7 Mysql5 7 HBuilderX list pip Navicat11 Django nodejs 项目技
  • MySql 在 Linux中字符集导致乱码问题的解决

    1 查看字符集 show variables like character show variables like char 看看出现的结果 默认的是客户端和服务器都用了latin1 所以会乱码 2 修改 1 首先应该复制配置文件 2 进入
  • jmeter同步定时器

    同步定时器是jmeter中一个比较重要的定时器 同步定时器 相当于一个储蓄池 累积一定的请求 当在规定的时间内达到一定的线程数量 这些线程会在同一个时间点一起并发 可以用来做大数据量的并发请求 验证服务器性能 1 线程中 线程属性 gt 线
  • postgresql(pg)数据库简介

    postgresql pg 数据库简介 1 什么是PostgreSql PostgreSQL是一个功能强大的开源对象关系型数据库系统 他使用和扩展了SQL语言 并结合了许多安全存储和扩展最复杂数据工作负载的功能 PostgreSQL的起源可
  • 深度学习------卷积(conv2D)底层

    卷积是深度学习的核心基础 充分理解卷积计算原理 二维卷积计算底层编程 代码按下列要求完成 lt 1 gt 定义图像image和核函数kernel矩阵 lt 2 gt 打印输出图像image和核函数的维度 lt 3 gt 定义函数comput
  • [转]npm查看一个包的版本信息

    我们npm install安装一个包之后 怎么查看这个包的版本信息呢 过一段时间之后 如何查看这个包最新的版本信息呢 下面将做一个全面的总结 1 查看项目中安装的所有的包 npm list 结果如下 vue2 0 test 0 1 0 C
  • 数字带通传输系统matlab仿真实验,基于MATLAB的数字带通传输系统设计

    基于MATLAB的数字带通传输系统设计 基于MATLAB的数字带通传输系统设计 通信原理课程实验 做了一晚上头脑异常清晰 写下来和大家分享下 程序有点问题 但可以基本实现要求 话不多说 上干货 软件环境是MATLAB2019B 大家如果找到
  • 机器学习(四):基于KNN算法对鸢尾花类别进行分类预测

    文章目录 专栏导读 1 KNN算法原理 2 实战案例 对鸢尾花类别分类预测 2 1确定特征和类别 2 2对特征进行处理 2 3对模型调参 选择最优参数 2 4使用分类模型进行预测 2 5评估模型 检验模型效果 3 完整代码及结果 专栏导读
  • idea导入maven项目问题

    问题产生原因 idea加载maven项目 如果网络不通畅 会在maven仓库中产生一个文件 如下图所示 当网络通畅时 在下载就会因为此文件导致无法下载正确的maven依赖 解决方案 打开maven仓库的根目录 搜索 pom lastUpda
  • 四张图,读懂 BIO、NIO、AIO、多路复用 IO 的区别

    作者 扛麻袋的少年 blog csdn net lzb348110175 article details 98941378 学习之前 我们先来了解一下IO模型 同步阻塞IO Blocking IO 即传统的IO模型 同步非阻塞IO Non
  • 智能工厂的指挥中心:APS排程系统

    从中国制造2025发布开始 我们就算正式进入数字信息化制造时代了 这就代表着很多的企业面临工业化转型 处理传统式的制造形式 版本升级为智能制造形式 APS指的是高级计划与排程均衡供应链与生产过程中各种资源 在不同的供应链与生产瓶颈阶段给出最
  • elasticsearch 脚本排序

    elasticsearch 脚本排序主要用于复杂场景的综合排序 脚本语言有 java painless groovy 目前调研的为painless kibana 脚本创建mapping DELETE ksc metadata PUT ksc
  • nacos支持配置文件热部署(@RefreshScope注解)

    nacos支持配置文件热部署 1 原理 RefreshScope注解实现的原理 是刷新bean 2 定义的变量 在代码中用变量来接 直接在代码块里面使用 示例 1 在配置文件定义一个share config的属性 share config
  • Ajax简单异步上传图片并回显

    前台代码 上传图片按钮 a href 选择图片 a 隐藏的文件选择器