JAVA实现网页上传头像
大概实现就是在页面嵌入一个file类型的input控件,并且将之隐藏,点击上传传递到这个控件上面,选择文件,将图片以base64的方式传递到后台,后台解码器解码,保存图片,并且把图片名字保存到数据库或者直接把图片转为byte数组存到数据库,数据库接收类型为binary。
这里我就介绍第一种办法将图片保存到本地的方式。
1.前台input控件的代码,这里设置accept表示只接受图片类型的文件。
<input type="file" name="fileToUpload" id="fileToUpload" onchange="openFile(event)" style="display:none;" accept="image/*">
</form>
2.onchange方法则为选择文件时候触发的方法。正常流程应该是不触发onchange方法,而是选择了图片的时候,应该有个上传按钮,在执行相关事件,我这里的做法其实就是选择了图片就会进行上传,这里可以根据个人的需求进行修改。js中onchange所执行的方法。将图片转换为base64编码,利用Ajax传到后台。
var openFile = function (event) {
var input = event.target;
var reader = new FileReader();
reader.onload = function () {
var database64 = getBase64Image(reader.result);
$.ajax({
url: "user/updateheadimg.do",
type: "POST",
data: { "imgdatabase": database64,"userid":$("#loginuserid").html()},
success: function (data) {
$("#headpng").html(data);
}
}); };
reader.readAsDataURL(input.files[0]); };
function getBase64Image(imgElem) {
return imgElem.replace("/^data:image\/(jpeg|jpg);base64,/", "");
}
3.后台接收到图片的base64编码,进行解码,保存图片到项目本地,保存图片路径到数据库。
@RequestMapping("updateheadimg")
public ModelAndView updateMyHeadImg(String imgdatabase,String userid){
ModelAndView mav=new ModelAndView();
if(imgdatabase==null){ }
int a=imgdatabase.indexOf("base64");
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
String path=request.getSession().getServletContext().getRealPath("");
imgdatabase=imgdatabase.substring(a+7);
BASE64Decoder decoder=new BASE64Decoder();
byte[] imgbyte;
try {
imgbyte = decoder.decodeBuffer(imgdatabase);
SAXReader reader=new SAXReader();
Document doc=reader.read(path+"\\WEB-INF\\classes\\headId.xml");
Element root=doc.getRootElement();
int headImgId=Integer.parseInt(root.getTextTrim());
OutputStream os=new FileOutputStream(new File(path+"\\headImg\\"+headImgId+".png"));
root.setText(""+(headImgId+1));
UtilTool.SaveToXml(doc,new File(path+"\\WEB-INF\\classes\\headId.xml"));
os.write(imgbyte,0, imgbyte.length);
userService.insetUserHead(headImgId+".png", userid);//头像写入数据库
os.close();
mav.addObject("imgsrc", headImgId+".png");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mav.setViewName("headimg");
return mav;
}
4.图片名字我写在了headId.xml配置文件中并且每次保存了都+1处理,写在配置文件是保证了数据持久化,不会出现重名图片。
<?xml version="1.0" encoding="UTF-8"?>
<headid>
1
</headid>
个人认为,将图片以二进制的方式保存到数据库更为合理方便,大家可以自己试一试,有空我也会贴出第二种方式的代码。
JAVA实现网页上传头像的更多相关文章
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- Android基础之——startActivityForResult启动界面并返回数据,上传头像
在android应用的开发过程中,常常会出现启动一个界面后填写部分内容后带着数据返回启动前的界面,最典型的应用就是登录过程.在非常多应用程序的模块中,都有"我的"这个模块,在未登录 ...
- 上传头像,layui上传图片
layui上传与bootstrap上传相似,只是不需要下插件, layui自带的已够用 先看一下前台界面,这里是用到的上传头像 先点击开始上传,头像上传至服务器中, 返回json添加至form表单中, ...
- python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)
一.上传文件 上传一个图片 使用input type="file",来上传一个文件.注意:form表单必须添加属性enctype="multipart/form-data ...
- Java Servlet图片上传至指定文件夹并显示图片
在学习Servlet过程中,针对图片上传做了一个Demo,实现的功能是:在a页面上传图片,点击提交后,将图片保存到服务器指定路径(D:/image):跳转到b页面,b页面读取展示绝对路径(D:/ima ...
- 《手把手教你》系列技巧篇(五十三)-java+ selenium自动化测试-上传文件-上篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- swift上传头像
很久没有写博客了,今天特地写了这个,也是一边仿照别人写的demo,注释部分都是需要的.需要的同学可以参考一下. @IBAction func headImageBtnPage(){ //上传头像 / ...
- java进行文件上传,带进度条
网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...
随机推荐
- 阿里云 Angular 2 UI框架 NG-ZORRO介绍
说明: Angular2出来后,一直想找个基于Angular2的前端后台管理框架,但一直没有找到比较适合的.前段时间在Angular官网资源无意之间看到NG-ZORRO,NG-ZORRO由阿里计算平台 ...
- 【Netty】源码分析目录
前言 为方便系统的学习Netty,特整理文章目录如下. [Netty]第一个Netty应用 [Netty]Netty核心组件介绍 [Netty]Netty传输 [Netty]Netty之ByteBuf ...
- 命令行执行php脚本 中$argv和$argc
在实际工作中有可能会碰到需要在nginx命令行执行php脚本的时候,当然你可以去配置一个conf用外网访问. 在nginx命令行中 使用 php index.php 就可以执行这个index.php脚 ...
- iOS XIB等比例适配
选择两个视图使其等宽高,再去约束里面就可以设置乘数因子. 简单的一个例子: 要求:设置白色视图的宽度为蓝色视图的一半 1.点击白色视图连线到父视图,选择 Equal Widths 2.选择右边 ...
- IDEA 环境设置
IDEA环境设置 任何事物都有两面性,如何用好才是关键.IDEA为我们提供了丰富的功能,但不代表默认的配置就适合于你.我们应当根据自己的条件.需求合理的配置,从而驾驭好这匹悍马.让它成为我们编程的利器 ...
- 阿里云 redis 通过rinetd 进行端口透传
https://help.aliyun.com/document_detail/43850.html?spm=5176.7738718.2.3.yW2eyQ 目前云数据库 Redis 版需要通过 EC ...
- 关于php中,记录日志中,将数组转为json信息记录日志时遇到的问题总结
1 中文编码化,无法看到具体的中文,如:你好 => \u4F60\u597D 解决方案:可以使用 json_encode($arr,JSON_UNESCAPED_UNICODE) 转义中文[ ...
- Ruby学习之深入类
在讨论对象模型时,对类做了初步了解,关于类本身,还有许多知识需要学习. 类定义 Ruby中,可以用class关键字或者Class.new方法来定义一个类,在Ruby中,类定义的同时就是在运行代码,类和 ...
- python 列表赋值和列表 sort 方法注意的问题
列表赋值 >>> a = b = [] >>> a.append() >>> a [] >>> b [] >>> ...
- Python3.x 配置原生虚拟环境
Python 3.4 之后支持原生的虚拟环境配置(3.3的虚拟环境不支持pip),把配置过程记录一下备忘. 1.创建虚拟环境 在控制台中,使用cd目录,切换到需要创建虚拟环境的目录. 使用如下命令,在 ...