上传编辑头像
来源:互联网 发布:淘宝收件人名字大全 编辑:程序博客网 时间:2024/05/29 11:45
今天给大家介绍一款强大的Flash头像编辑上传插件。富头像上传编辑,支持本地,预览和视频拍照和网络加载的flash头像编辑插件,可缩放,裁剪,定义和调色等。说了这么多,咱们先看看效果怎样
首先下载插件地址
http://pan.baidu.com/s/1qWBhTne
加压文件将以下js引入工程
swfobject.js
fullAvatarEditor.js
web工程结构
在web项目中添加以下两个flash文件
FullAvatarEditor.swf'和expressInstall.swf
工程基本结构
创建jsp页面
<%@ pagelanguage="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE htmlPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type" content="text/html;charset=UTF-8"><title>Inserttitle here</title></head> <p id="swfContainer"> 本组件需要安装Flash Player后才可使用,请从<ahref="http://dl.pconline.com.cn/html_2/1/114/id=8122&pn=0.html"target="_blank">这里</a>下载安装。 </p> <buttontype="button" id="upload"style="display:none;margin-top:8px;">点击上传</button> <scripttype="text/javascript"src="http://www.sucaihuo.com/Public/js/other/jquery.js"></script> <scripttype="text/javascript"src="${pageContext.request.contextPath}/scripts/swfobject.js"></script> <scripttype="text/javascript"src="${pageContext.request.contextPath}/scripts/fullAvatarEditor.js"></script> <scripttype="text/javascript"> swfobject.addDomLoadEvent(function() { //以下两行代码正式环境下请删除 if(location.href.indexOf('http://') == -1) alert('请于WEB服务器环境中查看、测试!\n\n既 http://*/simpleDemo.html\n\n而不是本地路径 file:///*/simpleDemo.html的方式'); var swf = newfullAvatarEditor("fullAvatarEditor.swf","expressInstall.swf", "swfContainer", { id: 'swf', upload_url:'/tewst/testServlet?userid=999&username=looselive', //上传接口,这里为后台对应servlet方法 method: 'post', //传递到上传接口中的查询参数的提交方式。更改该值时,请注意更改上传接口中的查询参数的接收方式 src_upload: 2,//是否上传原图片的选项,有以下值:0-不上传;1-上传;2-显示复选框由用户选择 avatar_box_border_width: 0, avatar_sizes:'100*100|50*50|32*32', avatar_sizes_desc: '100*100像素|50*50像素|32*32像素' }, function(msg) { switch (msg.code) { case 1 :// alert("页面成功加载了组件!"); break; case 2 :// alert("已成功加载图片到编辑面板。"); document.getElementById("upload").style.display ="inline"; break; case 3 : if (msg.type == 0) { alert("摄像头已准备就绪且用户已允许使用。"); } else if (msg.type == 1) { alert("摄像头已准备就绪但用户未允许使用!"); } else { alert("摄像头被占用!"); } break; case 5 : if (msg.type == 0) { if(msg.content.sourceUrl) { alert("原图已成功保存至服务器,url为:\n" +msg.content.sourceUrl + "\n\n" + "头像已成功保存至服务器,url为:\n" +msg.content.avatarUrls.join("\n\n") + "\n\n传递的userid=" + msg.content.userid + "&username=" +msg.content.username); } else { alert("头像已成功保存至服务器,url为:\n" +msg.content.avatarUrls.join("\n\n") + "\n\n传递的userid=" + msg.content.userid + "&username=" +msg.content.username); } } break; } } ); document.getElementById("upload").onclick = function() { swf.call("upload"); }; }); </script></html>
创建servlet类
创建一个处理图片action类
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.FileItemIterator;import org.apache.commons.fileupload.FileItemStream;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.util.Streams;/** 后台图片处理操作类**/public class actionspost extends HttpServlet {/** * @Fields serialVersionUID : */private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {try {getimage(request, response);} catch (FileUploadException e) {e.printStackTrace();}}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doPost(req, resp);}/** * 图片保存类 * * @param request * @param response * @throws UnsupportedEncodingException * @throws FileUploadException * @throws IOException */public void getimage(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException,FileUploadException, IOException {String contentType = request.getContentType();if (contentType.indexOf("multipart/form-data") >= 0) {ResultMessage result = new ResultMessage();result.avatarUrls = new ArrayList();result.success = false;result.msg = "Failure!";String userid;String username;FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);FileItemIterator fileItems = upload.getItemIterator(request);// 定义一个变量用以储存当前头像的序号int avatarNumber = 1;// 取服务器时间+8位随机码作为部分文件名,确保文件名无重复。SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssS");String fileName = simpleDateFormat.format(new Date());Random random = new Random();String randomCode = "";for (int i = 0; i < 8; i++) {randomCode += Integer.toString(random.nextInt(36), 36);}fileName = fileName + randomCode;// 基于原图的初始化参数String initParams = "";BufferedInputStream inputStream = null;BufferedOutputStream outputStream = null;// 遍历表单域while (fileItems.hasNext()) {FileItemStream fileItem = fileItems.next();String fieldName = fileItem.getFieldName();// 是否是原始图片 file 域的名称(默认的 file// 域的名称是__source,可在插件配置参数中自定义。参数名:src_field_name)Boolean isSourcePic = fieldName.equals("__source");// 当前头像基于原图的初始化参数(只有上传原图时才会发送该数据,且发送的方式为POST),用于修改头像时保证界面的视图跟保存头像时一致,提升用户体验度。// 修改头像时设置默认加载的原图url为当前原图url+该参数即可,可直接附加到原图url中储存,不影响图片呈现。if (fieldName.equals("__initParams")) {inputStream = new BufferedInputStream(fileItem.openStream());byte[] bytes = new byte[inputStream.available()];inputStream.read(bytes);initParams = new String(bytes, "UTF-8");inputStream.close();}// 如果是原始图片 file// 域的名称或者以默认的头像域名称的部分“__avatar”打头(默认的头像域名称:__avatar1,2,3...,可在插件配置参数中自定义,参数名:avatar_field_names)else if (isSourcePic || fieldName.startsWith("__avatar")) {String virtualPath = "/upload/jsp_avatar" + avatarNumber+ "_" + fileName + ".jpg";// 原始图片(默认的 file// 域的名称是__source,可在插件配置参数中自定义。参数名:src_field_name)。if (isSourcePic) {// 文件名,如果是本地或网络图片为原始文件名、如果是摄像头拍照则为 *FromWebcam.jpgString sourceFileName = fileItem.getName();// 原始文件的扩展名(不包含“.”)String sourceExtendName = sourceFileName.substring(sourceFileName.lastIndexOf('.') + 1);result.sourceUrl = virtualPath = String.format("/upload/jsp_source_%s.%s", fileName,sourceExtendName);}// 头像图片(默认的 file// 域的名称:__avatar1,2,3...,可在插件配置参数中自定义,参数名:avatar_field_names)。else {result.avatarUrls.add(virtualPath);avatarNumber++;}try {inputStream = new BufferedInputStream(fileItem.openStream());} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}try {outputStream = new BufferedOutputStream(new FileOutputStream(getServletContext().getRealPath("/")+ virtualPath.replace("/", "\\")));} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {Streams.copy(inputStream, outputStream, true);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {inputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {outputStream.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {outputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {// 注释①// upload_url中传递的查询参数,如果定义的method为post请使用下面的代码,否则请删除或注释下面的代码块并使用注释②的代码inputStream = new BufferedInputStream(fileItem.openStream());byte[] bytes = new byte[inputStream.available()];inputStream.read(bytes);inputStream.close();if (fieldName.equals("userid")) {result.userid = new String(bytes, "UTF-8");} else if (fieldName.equals("username")) {result.username = new String(bytes, "UTF-8");}}}// 注释② upload_url中传递的查询参数,如果定义的method为get请使用下面注释的代码/* * result.userid = request.getParameter("userid"); result.username = * request.getParameter("username"); */if (result.sourceUrl != null) {result.sourceUrl += initParams;}result.success = true;result.msg = "Success!";/* * To Do...可在此处处理储存事项 */// 返回图片的保存结果(返回内容为json字符串,可自行构造,该处使用fastjson构造)// JSON.toJSONString(result);}}}
消息处理类ResultMessage
import java.io.Serializable;import java.util.ArrayList;public class ResultMessage implements Serializable{/** * @Fields serialVersionUID */ private static final long serialVersionUID = 1L;/*** 表示图片是否已上传成功。*/public Boolean success;public String userid;public String username;/*** 自定义的附加消息。*/public String msg;/*** 表示原始图片的保存地址。*/public String sourceUrl;/*** 表示所有头像图片的保存地址,该变量为一个数组。*/public ArrayList avatarUrls;}
说明
newfullAvatarEditor(['*/FullAvatarEditor.swf',]['*/expressInstall.swf',] swfContainerID [,height] [,width], flashvars,[callback]);
*/FullAvatarEditor.swf 插件主swf文件的路径,文件名必须是FullAvatarEditor.swf*/expressInstall.swf expressInstall.swf文件的路径,文件名必须是expressInstall.swfswfContainerID 用以包裹Flash的HTML元素的ID。height Flash的高度,默认为600。width Flash的宽度,默认为630。flashvars 将要传递到flash 的 key/value 参数,请参见 配置参数。callback flash执行某些操作时的回调函数,请参见回调函数。
小结: 插件兼容的浏览器挺多的,api操作简单。不错的。有用到的同学希望可以帮到。
1 1
- 上传编辑头像
- 头像编辑
- 纳税服务系统【用户模块之日期组件、上传头像、编辑头像】
- 上传头像
- 上传头像
- 上传头像
- 上传头像
- 头像上传
- 上传头像
- 头像上传
- 头像上传
- 头像上传
- 上传头像
- 上传头像
- 头像上传
- 头像上传
- 上传头像
- 头像上传
- 自定义背景及进度背景的progressbar进度条,可在用户设置等级等领域有所作用
- Codeforces Round #338 (Div. 2) 615B Longtail Hedgehog(dp)
- Algorithm intro - Select Sort
- 方便代理下单的EcStore收货地址一键分析插件,同时支持淘宝/京东/一号店
- blkid 命令
- 上传编辑头像
- 串匹配算法之Sunday算法
- Mac 批量删除 .svn 文件
- 【虚幻4】学习总结6-第三人称角色01
- 编辑距离问题
- Algorithm Intro - Bubble Sort
- 《Linux命令、编辑器与Shell编程》读书笔记12-函数和脚本
- spring学习(转载)
- 初学jQuery ajax