上传图片,使用很简单的办法上传图片

使用很简单的办法上传图片

1. 首先把上传的页面写好

<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"><title>使用很简单的办法上传图片</title>
<head th:include="include::header"><link rel="shortcut icon" href="favicon.ico"><link href="/css/bootstrap.min.css?v=3.3.6" rel="stylesheet"><link href="/css/font-awesome.css?v=4.4.0" rel="stylesheet"><link href="/css/animate.css" rel="stylesheet"><link href="/css/style.css?v=4.1.0" rel="stylesheet">
</head>
<style>h3{color: #000023;display: block;line-height: 26px;text-align: left;}h4{color: #3b0000;margin-left: 8px;}.fist{background-color: #b9bebb;height: 26px;}.set-status{margin-left: 66px;margin-top: 10px;}.ps{color: #272727;font-family: "楷体";font-size: 16px;}
</style>
<body class="gray-bg">
<div class="wrapper wrapper-content animated fadeInRight"><div class="row"><div class="col-sm-12"><div class="ibox float-e-margins"><div class="ibox-content"><form method="POST" enctype="multipart/form-data"  id="signupForm" ><!--获取到xMainHome的id   方便前后台的数据传输--><input id="id" type="hidden" name="id" th:value="${wxMainHD.id}"><div class="fist-picture"><div class="fist" ><h3>首页图</h3></div><label class="fist-show" style="margin-top: 6px"><h4> 首页展示图(请点击黑色线框中选择需要上传的图片):</h4></label><!--首页展示图片上传框--><div class="form-group"><!--设置图片上传类型以及函数触发事件--><input accept=".jpg,.jpeg,.png" type="file" class="files" id="mainLogoHome" name="mainLogo" style="display:none;" onchange="fileChange(event)"><div  class="picture" style="margin-left: 40px;border:1px solid #000"><!--显示首页图片区域--><img th:src="${wxMainHD.mainLogo}"  id="img-change" width="600px" height="350px"><br><span style="color:grey;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;">图片仅支持JPG/JPEG/PNG格式,大小不超过2M</span></div></div></div><div class="form-group"><div class="save-content" style="margin-left: 130px;margin-top: 10px"><button id="b1" type="submit" class="btn btn-primary" >上传图片</button>&nbsp;</div></div></form></div></div></div></div></div>
<div th:include="include::footer"></div>
<script type="text/javascript" src="/js/jquery-labelauty.js"></script>
<script type="text/javascript" src="/js/wangEditor.js"></script>
<script type="text/javascript" src="/js/appjs/sys/WxMainHome/editIn.js"></script>
</body>
</html>

JS:

/*** 设置默认规则*/
$(function () {validateRule();
})
var data=[];/*** 设定默认规则*/
$.validator.setDefaults({submitHandler : function() {if($('#img-change').attr("src").length==0){alert("请上传首页图mainLogo!");}else{$('#b1').attr("disabled","true");saveEditIn();}}
});/*** 设定单击事件(首页)*/
$("#img-change").click(function () {$("#mainLogoHome").click();
});/*** 单击图片区域选定需要上传的图片(首页)* @param event* @returns {boolean}*/
var fileChange = function (event) {var files = event.target.files, file;if (files && files.length > 0) {// 获取目前上传的文件file = files[0];// 文件大小校验的动作if (file.size > 1024 * 1024 * 2) {alert('图片大小不能超过2MB!');return false;}// 获取 window 的 URL 工具var URL = window.URL || window.webkitURL;// 通过 file 生成目标 urlvar imgURL = URL.createObjectURL(file);// 用attr将img的src属性改成获得的url$("#img-change").attr("src", imgURL);}
};/*** 保存编辑的内页*/
var saveEditIn = function () {layer.load(1,{shade: [0.5,"#6a6a6a"]})var formData = new FormData();// 将id值传进来var id = $("#id").val();var homeId = $("#homeId").val();var imgDetail = editor.txt.html();var status = $('input:radio[name="status"]:checked').val();// 打印出相应字段console.log(imgDetail)console.log(status)// 与首页相关console.log(document.getElementById("mainLogoHome").files[0]);if(document.getElementById("mainLogoHome").files[0]==="undefined"||document.getElementById("mainLogoHome").files[0]==null){formData.append("mainLogo",$("#img-change").attr("src"));} else {formData.append("file",document.getElementById("mainLogoHome").files[0],"mainLogo"+suffix($("#mainLogoHome").val()));}// 追加需要使用到的字段// 追加首页的dformData.append("id",id);// 追加详情页的homeIdformData.append("homeId",homeId);// 追加详情页的imageUrlformData.append("imageUrl",imgDetail);// 追加首页的statusformData.append("status",status);/*** AJAX请求---> POST*/$.ajax({type:"POST",data:formData,url:"/sys/WxMainHome/saveEditIn",async : false,processData:false,contentType: false,success : function(r) {if (r.code == 0) {parent.layer.msg("内页编辑成功");parent.reLoad();// 获取窗口索引var index = parent.layer.getFrameIndex(window.name);parent.layer.close(index);} else {parent.layer.msg(r.msg);}}})
}/***  首页* @param name* @returns {string}*/
var suffix = function (name) {var index1=name.lastIndexOf(".");var index2=name.length;var suffix=name.substring(index1+1,index2);return "."+suffix;
}

2. 上传图片工具类util

上传 FileUtils,就是将图片保存到盘符当中,

package com.ultrapower.life.admin.util;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;public class FileUtils {// /上传public static String save(String dir, MultipartFile file) {if (file.isEmpty()) {return null;}String fileName = getPicRandomName(file.getOriginalFilename());File upload = getFileDir(dir);File dest = new File(upload,fileName);try {file.transferTo(dest);return Constant.imageUrl + dir+"/" + fileName;} catch (IOException e) {e.printStackTrace();}return null;}public static String getPicRandomName(String picName) {String name = "";String randomName = RandomValues.getRandoms(16);int index = picName.lastIndexOf(".");if(index<0)return randomName+".png";String picType = picName.substring(index);name = randomName + picType;return name;}public static File getFileDir(String id) {String childPath="/";String filePath = Constant.imageFilePath;if (StringUtils.isNotBlank(id)){childPath = id+"/";}//如果上传目录为/static/images/upload/,则可以如下获取File upload=new File(filePath,childPath);if(!upload.exists()){upload.mkdirs();}System.out.println(upload.getAbsolutePath());return upload;}}

保存图片时随机生成文件名

RandomValues

package com.ultrapower.life.admin.util;/*** 生成指定位数随机数* Created by wuyongchang on 2019/10/30 14:07*/
public class RandomValues {private static String[] randomValues = new String[]{"0","1","2","3","4","5","6","7","8","9","_","a", "b", "c", "d", "e", "f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};private static String[] randomValuesNumber = new String[]{"0","1","2","3","4","5","6","7","8","9"};public static String getRandoms(int lenght) {StringBuffer str = new StringBuffer();for(int i = 0;i < lenght; i++){Double number=Math.random()*(randomValues.length-1);str.append(randomValues[number.intValue()]);}return str.toString();}public static String getRandomsNumber(int lenght) {StringBuffer str = new StringBuffer();for(int i = 0;i < lenght; i++){Double number=Math.random()*(randomValuesNumber.length-1);str.append(randomValuesNumber[number.intValue()]);}return str.toString();}
}

图片信息

ImgInfo

package com.ultrapower.life.admin.util;import lombok.Data;import java.util.Arrays;@Data
public class ImgInfo {private Integer errno;private String[] data;@Overridepublic String toString() {return "ImgInfo [errno=" + errno + ", data=" + Arrays.toString(data) + "]";}
}

3.controller层


/*** 编辑内页* @param model* @param id* @return*/@Log("编辑内页")@RequiresPermissions("sys:WxMainHome:editIn")@GetMapping("/editIn/{id}")public String editIn(Model model, @PathVariable("id") Integer id){WxHomeDetailVO wxMainHD = wxMainHomeService.getId(id);model.addAttribute("wxMainHD",wxMainHD);return prefix + "/editIn";}/*** 对编辑内页保存* @param file* @param wxMainHome* @param wxMainDetail* @return*/@RequiresPermissions("sys:WxMainHome:editIn")@PostMapping("/saveEditIn")@ResponseBodypublic R saveEditIn(@RequestParam(value = "file",required = false) MultipartFile file, WxMainHome wxMainHome,WxMainDetail wxMainDetail){// 保存(内页编辑)首页boolean flag = wxMainHomeService.saveInfo(file,wxMainHome);if (flag) {return R.ok();} else {return R.error("保存失败");}}

4. service及其实现类

service

    boolean saveInfo(MultipartFile files, WxMainHome wxMainHome);

service实现类

 /*** 保存首页图片* @param files* @param wxMainHome* @return*/@Override@Transactional(rollbackFor=Exception.class)public boolean saveInfo(MultipartFile files, WxMainHome wxMainHome) {String mainLogo = "";// 上传图片名String originalFileName = "";if (files != null){try {// 生成新的文件名byte[] fileBytes =files.getBytes();// 取得当前文件名originalFileName = files.getOriginalFilename();// 生成文件名if (originalFileName.contains("mainLogo")){String save = FileUtils.save(mainLogo,files);wxMainHome.setMainLogo(save);}} catch (IOException e) {e.printStackTrace();}}// 保存图片后自动更新时间wxMainHome.setUpdateTime(LocalDateTime.now());boolean flag = wxMainHomeMapper.saveInfo(wxMainHome);return flag;}

5. mapper文件

(1)接口

    Boolean saveInfo(WxMainHome wxMainHome);

(2)xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ultrapower.life.mapper.WxMainHomeMapper"><resultMap id="ResultMap" type="WxMainHome"><id property="id" column="id"/><result property="position" column="position"/><result property="type" column="type"/><result property="name" column="name"/><result property="status" column="status"/><result property="mainLogo" column="main_logo"/><result property="createTime" column="create_time"/><result property="updateTime" column="update_time"/></resultMap><!--将首页图地址更改--><update id="saveInfo" parameterType="com.ultrapower.life.entity.WxMainHome">update wx_main_homesetstatus=#{status},main_logo=#{mainLogo},update_time=#{updateTime}where id=#{id}</update></mapper>

由于我们需要将上传的图片放到盘符上,因此需要在

application-dev.yml文件里设置路径

在这里插入图片描述

这里设置好就可以了,还需要在本地搭建一个Nginx,方便开发

好了,我们来演示一下:

选择图片之前:

在这里插入图片描述

点击之后:

在这里插入图片描述

图片加载进来了:

在这里插入图片描述

保存之后:

在这里插入图片描述

OK 了!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net图片上传

效果图&#xff1a; 代码如下&#xff1a; 引用&#xff1a;js&#xff0c;css bootstrap-fileupload.min.js bootstrap-fileupload.min.css FileSize.js 附件下载请点击这里 View里的代码&#xff1a; <div class"row">using (Html.BeginForm("Create…

图片上传(调用微信接口)

图片上传之原生方法 图片上传、压缩、回显、缩略图放大、删除、下载&#xff0c;可以参考这儿&#xff08;h5方法&#xff09; https://github.com/zhangstar1331/pictureUpload 效果展示 背景 图片上传&#xff0c;我们一般用下面的H5方法&#xff0c;但是在安卓手机上无法…

Qt模仿安卓手机中app图标移动

一、简述 最近使用Qt中的拖拽事件加上一些动画效果模仿了安卓手机中日常用的app图标拖动&#xff0c;目前支持横向移动。 通过判断当前拖动鼠标的位置来进行选择是否进行动画移动前后的按钮。

关于android手机桌面应用图标的角标通知

vivo桌面角标通知&#xff1a; 网上有相关的代码实现方式&#xff0c;但是经过vivo官方文档没有找到对应方法&#xff0c;于是找到客服给我的回复是未开放此功能&#xff0c;具功能只对指定应用开放&#xff0c;下面是客服的回复截图 小米桌面角标通知&#xff1a; 文档里面有…

android修改状态栏图标大小,安卓手机状态栏图标位置修改教程

安卓手机状态栏图标等等都可以修改&#xff0c;包括手机信号、电池等等他们的图标位置都是可以互换的&#xff01;下面就来教大家修改状态栏&#xff0c;以及安卓手机状态栏图标位置互换教程&#xff01; 修改具体方法&#xff1a; 1、反编译原文件framework-res.apk&#xff0…

Android 中更改了默认app图标,在手机上还是显示默认图标

注意 启动图标名称勿用默认名称&#xff0c;改为自定义的名称&#xff0c;比如ic_launcher_k&#xff0c;ic_launcher_自定义&#xff0c;防止启动图标找到第三方引用的图标&#xff0c;导致不是想要的logo <applicationandroid:name".KApplication"android:allow…

Android如何确定显示图标

在AndroidManifest.xml中<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.hh.practice"><applicationandroid:allowBackup"true"…

数据科学在文本分析中的应用 :中英文 NLP(下)

回顾上篇&#xff0c;我们详细介绍了如何实现猫途鹰网站的中英文评论数据采集、入库和清理。本篇中&#xff0c;我们会重点介绍数据建模的原理和代码实现&#xff0c;其中包括 emoji 分析、情感分析、分词、词性词频分析、关键词分析、词云和主题模型文本分类。 数据建模 在这…

“人机之恋”升级:GPT让虚拟伴侣更会聊天,也更危险

一位用户表示&#xff0c;AI“小人儿”会主动找话题聊天&#xff0c;虽然有时候的回答很诡异&#xff0c;但随着聊天不断进行下去&#xff0c;AI会“训练”自己的角色&#xff0c;行为越来越贴近用户的感情需求。 截至目前&#xff0c;豆瓣“人机之恋”小组已有9498名成员。Rep…

AKA「虚拟女友」,月入500万美元,谈恋爱按分钟计费

来源&#xff1a;新智元 各种逼真的AI工具火了之后&#xff0c;各路心思活泛的选手都开始大显神通了&#xff0c;有卖果照的&#xff0c;有给自己造AI老婆的。 AI女友&#xff0c;俨然已经成为一个巨大的市场。 这不&#xff0c;最近一位名叫Caryn Marjorie的网红&#xff0c;根…

​普通人需要学Python吗?能学会吗?

最近朋友问我近况&#xff0c;我说在运营一个Python入门基地的社群&#xff0c;她说Python是什么东西&#xff1f;有什么用&#xff1f;我和她反复解释了半天&#xff0c;大家反而更糊涂了&#xff0c;最后她干脆问&#xff1a;你就直接告诉我“Python”有什么用&#xff1f;我…

23岁美国女网红用AI分身交1000多男友!月入500万美元,谈恋爱按分钟计费

【导读】这位23岁的女网红用GPT-4复刻了一个自己后&#xff0c;已经周入7万多美元了。不仅如此&#xff0c;短短几天内&#xff0c;候补名单上就排了差不多1万名男施主。 各种逼真的AI工具火了之后&#xff0c;各路心思活泛的选手都开始大显神通了&#xff0c;有卖果照的&#…

月入3000万,23岁美国女网红用AI分身交1000多男友!谈恋爱按分钟计费

来源 | 新智元 微信号&#xff1a;AI-era 【导读】这位23岁的女网红用GPT-4复刻了一个自己后&#xff0c;已经周入7万多美元了。不仅如此&#xff0c;短短几天内&#xff0c;候补名单上就排了差不多1万名男施主。 各种逼真的AI工具火了之后&#xff0c;各路心思活泛的选手都开…

人工智能,真的不在乎人类的阻拦

作者 | Tommy 首图来源&#xff1a;G2 人工智能是否会灭绝人类&#xff1f; 这也是个老生常谈的问题了&#xff0c;只要看看好莱坞拍出的电影&#xff0c;经典如《终结者》、《黑客帝国》、《我&#xff0c;机器人》等&#xff0c;人类面对强大的“AI反派”&#xff0c;每次被揍…

恐怖!AI 已不屑与人类交流!

原创&#xff1a;小姐姐味道&#xff08;微信公众号ID&#xff1a;xjjdog&#xff09;&#xff0c;欢迎分享&#xff0c;非公众号转载保留此声明。 随着 ChatGPT 的进化&#xff0c;可怕的事情终于发生了。在文章中&#xff0c;我们会看到 AI 和 AI 之间心与心的交流&#xff0…

ChatGPT 实现对twitter、微博内容的扩、缩写,主题词的提取,以及话题的标签格式化。

ChatGPT 不光了解一些正式的文件格式&#xff0c;同样也了解互联网时代新一代产品的个性化格式。比如&#xff0c;twitter、微博通常采用 # 来代表内容的话题。而 ChatGPT 同时可以完成对内容的扩、缩写&#xff0c;主题词的提取&#xff0c;以及话题的标签格式化。 让我们先尝…

是兄弟就来找ChatGPT漏洞,OpenAI:最高赏金2万刀

克雷西 发自 凹非寺量子位 | 公众号 QbitAI 现在&#xff0c;给ChatGPT找漏洞有钱挣了。 今天凌晨&#xff0c;OpenAI宣布开启漏洞赏金计划 &#xff1a; 报告ChatGPT漏洞&#xff0c;可以获得最高2万美元现金奖励。 具体来说&#xff0c;OpenAI将与漏洞反馈平台Bugcrowd展开合…

计算机维汉输入法表格,维语输入法

维语输入法电脑版是一款专业可靠的维语输入以及学习维语软件&#xff0c;维语输入法官方版内置专业的维语编辑器及代码编辑器&#xff0c;还提供了16种维哈柯印刷字体&#xff0c;帮你顺利进行编排书刊杂志、制作电子表格、网页设计等工作&#xff0c;维语输入法电脑版是Window…

维汉在线翻译电脑版_支持汉语维吾尔语互译_维文翻译汉语和维语学习

维汉在线翻译电脑版&#xff0c;现在可以免费试用&#xff0c;维文智能翻译和文字识别可以帮助我们工作还有学习维语。 可以支持维汉互译&#xff0c;即维语翻译成汉语&#xff0c;汉语翻译成维语&#xff0c;还可以把英语也翻译成维语等等。 现在看下它的文字识别功能&#xf…

直播预告 | 梁宁:ChatGPT的真需求

今晚8点“图灵社区”直播间&#xff0c;产品战略专家梁宁老师将和图灵联合创始人刘江总编&#xff0c;从产品的第一性原理解析ChatGPT&#xff0c;记得预约~