当前位置: 首页 > news >正文

开发网站几乎都做过上传图片并截图,做个无刷新Asp.Net上传并截图示例

选择文件,自动上传并生成缩放图(上传带进度条),形成预览图

2.在预览区,实现鼠标拖拽截图区,截取图片(示例截图区按缩放图小边为截图正方形长度,可扩展为截图区可变形式)

3.点击保存,截取小图,保存截取图并显示在页面上,并删除原缩略图

示例截图:

-------------------------------------------------------------------------------风骚分隔线-----------------------------------------------------------------------------------------------

第一步:准备工作,认识一些必要的东西

1.无刷新上传借助于Uploadify这个基于Flash的支持多文件上传的Jquery插件,很多人估计都用过了,我也在不同的项目中用过很多次,简单易用且功能强大

(美中不足,插件本身对session使用有一点BUG,不过能解决,chrome&FireFox里上传如果代码中有用Session,获取不到)

没用过这个插件的可以去它的官网认识一下这个插件

Uploadify官网:

http://www.uploadify.com/

uploadify下载: (本示例用:Uploadify-v2.1.4.zip)

http://www.uploadify.com/download/

uploady全属性、事件、方法介绍:

http://www.uploadify.com/documentation/

这里对一些常用介绍一下:

名称介绍类型
Uploadify常用属性
uploaderuploadify的swf文件的路径string
cancelImg取消按钮图片路径string
folder上传文件夹路径string
multi是否多文件上传boolean
script上传文件处理代码的文件路径json
scriptData提交到script对应路径文件的参数类型
method提交scriptData的方式(get/post)string
fileExt支持上传文件类型(格式:*.jpg;*.png)string
fileDesc提示于点击上传弹出选择文件框文件类型(自定义)string
sizeLimit上传大小限制(byte为单位)integer
auto是否选择文件后自动上传boolean
Uploadify常用事件
onAllComplete上传完成后响应function
onCancel取消时响应function
Uploadify常用方法
.uploadify()初始化uploadify上传
.uploadifyUpload()触发上传
.uploadifySettings()更新uploadify的属性

2.裁剪图片使用CutPic.js (这个JS文件如果各位要用,要自己用心看看,注释很详细了)

源码太长,这里不贴出来,后面会提供下载

显示图片也用的CutPic里的方法

JS代码显示

function ShowImg(imagePath,imgWidth,imgHeight) { var imgPath = imagePath != "" ? imagePath : "!images/ef_pic.jpg"; var ic = new ImgCropper("bgDiv", "dragDiv", imgPath, imgWidth, imgHeight, null);
}

HTML显示部分布局(一个嵌套层级关系,外面是显示图片,里面dragDiv是拖拽层)

<div id="bgDiv"> <div id="dragDiv"> </div> </div>
第二步:引用资源,开始编写

Default.aspx页

用了三个隐藏域去存截图区的左上角X坐标,Y坐禁,以及截图框的大小;

这个要修改CutPic里设置切割要用到,CutPic.js里己经做了注释;

Uploadify中参数如果动态改变的,可以写在像我下面写的这样去更新参数

$("#uploadify").uploadifySettings('scriptData',{'LastImgUrl':$('#hidImageUrl').val()}); //更新参数

View Code

上传图片Hander代码(UploadAvatarHandler.ashx)

View Code

切割图片Hander代码(CutAvatarHandler.ashx)

View Code


这种就可以达到我文章开头的要求了

第三步:修复文件开头提到Uploadify用Session在Chrome和FireFox下的Bug (身份验证也一样有这个BUG,修复同理)

如果UploadAvatarHandler.ashx中要用到Session那就需求些额外的配置

在Global.asax中Application_BeginRequest加入下列代码

protected void Application_BeginRequest(object sender, EventArgs e) { //为了Uploadify在谷歌和火狐下不能上传的BUG try { string session_param_name = "ASPSESSID"; string session_cookie_name = "ASP.NET_SessionId"; if (HttpContext.Current.Request.Form[session_param_name] != null) { UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]); } else if (HttpContext.Current.Request.QueryString[session_param_name] != null) { UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString[session_param_name]); } } catch { } //此处是身份验证 try { string auth_param_name = "AUTHID"; string auth_cookie_name = FormsAuthentication.FormsCookieName; if (HttpContext.Current.Request.Form[auth_param_name] != null) { UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]); } else if (HttpContext.Current.Request.QueryString[auth_param_name] != null) { UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[auth_param_name]); } } catch { } }

页面中加入隐藏域

<asp:HiddenField ID="hdSessionId" runat="server" />

并在页面的Load事件中,把SessionID赋给隐藏域


Uploadify()方法scriptData属性在做修改

$('#uploadify').uploadify({ //.... 'scriptData': { 'ASPSESSID': $('[id$=hdSessionId]').val() }, //..... });

以上操作,用于修改身份验证也一样。。。

第四步:一些扩展

CutPic.js中有一些可以扩展

比如:有人要求截图区域自己要可以拖动

把CutPic.js图片显示,截图区HTML变成这样

<div id="bgDiv"> <div id="dragDiv"> <div id="rRightDown" style="right: 0; bottom: 0;"> </div> <div id="rLeftDown" style="left: 0; bottom: 0;"> </div> <div id="rRightUp" style="right: 0; top: 0;"> </div> <div id="rLeftUp" style="left: 0; top: 0;"> </div> <div id="rRight" style="right: 0; top: 50%;"> </div> <div id="rLeft" style="left: 0; top: 50%;"> </div> <div id="rUp" style="top: 0; left: 50%;"> </div> <div id="rDown" style="bottom: 0; left: 50%;"> </div> </div> </div>

再给这些新添DIV写些样式。。。^_^! 这里自己扩展吧

显示区的JS加上最后一个参数

http://www.cnnetsun.cn/news/3152199.html

相关文章:

  • SSH安全配置全攻略:从密钥认证到入侵检测的运维必修课
  • 轻量级可扩展日志框架-日志系统设计思路与前置知识
  • 2026笔记本避坑指南:低色域屏、8GB内存、赛扬CPU为何成体验地雷
  • 奔驰曲轴皮带盘脱层,A级/GLA/GLB异响的来源
  • 抖音批量下载工具完全指南:3大核心功能+4步配置方案,轻松实现无水印视频下载与智能管理
  • 老字号书法国画班,手残党也能变大师![特殊字符]✨
  • Boss-Key老板键:如何在3分钟内掌握一键隐藏窗口的终极隐私保护技巧
  • 抽奖页高频查询优化:Redis 如何缓存活动详情和中奖记录
  • AI智能体:未来已来的数字分身,你准备好了吗?
  • DsHidMini:三步让PS3手柄在Windows上完美重生的终极指南
  • Power BI中替代Excel COUNTIF的DAX计数逻辑
  • Trilium中文版终极指南:免费开源笔记软件如何彻底改变你的知识管理
  • 【设计原则和建议】 方法
  • 如何3分钟为Windows和Linux安装精美macOS光标主题:免费开源桌面美化终极指南
  • 再回到技术面,研究 T-SQL 的 UNION、EXISTS、EXCEPT、INTERSECT 运算符。
  • freerots接口代码示例
  • 《通信电子线路》全套PPT课件
  • OpenClaw 2.7.9 搭建实操,桌面自动化工具避坑完整流程
  • 怎样在5分钟内免费将图片转换为SVG矢量图形:SVGcode实用指南
  • DiffuMeta:基于代数语言与扩散Transformer的3D超材料AI设计
  • 短视频穿搭性别偏好分析程序,区分男女用户对潮流色彩,版型的不同偏好。
  • 5个简单步骤:在Windows上解锁Apple触控板的完整功能
  • 开题撰写告别反复改稿,okbiye 一站式 AI 开题报告创作功能深度解析
  • 告别命令行恐惧:3分钟学会用Crontab UI可视化管理Linux定时任务
  • SciPy L-BFGS-B 实战:3个关键参数调优与收敛速度对比分析
  • 美团 Leaf-snowflake 分布式 ID 生成器 k8s 改造的想法
  • 164、PCIE在VMware中的虚拟化:当硬件变成“软件定义”
  • 解决层高、角柱难题!抚州美伦熙语别墅土建井道定制曳引电梯实录
  • Unitree RL Gym:四足机器人强化学习框架完全指南
  • 轻量级AI智能体:安全、场景与硬件穿透的工程实践