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 ...
随机推荐
- SpringMVC 返回json的两种方式
前后台数据交互使用json是一种很重要的方式.本文主要探讨SpringMVC框架使用json传输的技术. 请注意,本文所提到的项目使用Spring 版本是4.1.7,其他版本在具体使用上可能有不一样的 ...
- Oracle ADG搭建
Oracle Active Data Guard搭建 一:安装 1.基础环境配置 1.1.开启强制日志记录 DG日志发送方式中ARCH进程和LGWR进程的ASYNC模式都是基于日志同步的,所以我们必须 ...
- ELK日志检索并邮件微信通知
简介 脚本为通过api检索日志内容,并通过邮件或者微信发送出来. 脚本 index检索脚本 #!/usr/bin/env python # coding:utf-8 from elasticsearc ...
- 【简单理解】gulp和webpack的区别
Gulp和Webpack的基本区别: gulp可以进行js,html,css,img的压缩打包,是自动化构建工具,可以将多个js文件或是css压缩成一个文件,并且可以压缩为一行,以此来减少文件体积,加 ...
- input选择框样式修改与自定义
html自带的选择框样式不好看,并且在ios设备上丑的罚款.所以一般都是自定义样式: 原理:将原来默认的input选择框隐藏,然后控制label的:before与:after,配合矢量图标或者图片来实 ...
- linux 下安装 sphinx 服务器
准备工作:安装需要的扩展文件 yum install make gcc g++ gcc-c++ libtool autoconf automake imake libxml2-devel expat- ...
- PHP动态图像处理
相关代码见:https://www.github.com/lozybean/learn_www/ 目录 1. 画布管理: imagecreate():创建一个基于调色板的画布,指定画布的长.宽 ...
- VS2010 Extension实践(2)
在上一篇(VS2010 Extension (1)实践)里,主要展示了如何使用MEF扩展VS2010,来扩展编辑控制和展现自己的UI:在实现QuickToolbar的时候,发现MEF仅仅提供了很基本的 ...
- SQL Server 审计操作概念
概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...
- 深入设计电子计算器(一)——CPU指令集设计
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/8254096.html 作者:窗户 Q ...