news 2026/7/5 4:50:10

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开发网站几乎都做过上传图片并截图,做个无刷新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加上最后一个参数

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 4:50:01

SSH安全配置全攻略:从密钥认证到入侵检测的运维必修课

1. 项目概述&#xff1a;为什么SSH安全配置是运维的必修课如果你管理过任何一台暴露在公网的Linux服务器&#xff0c;那么对SSH&#xff08;Secure Shell&#xff09;一定不会陌生。它就像你通往服务器世界的那扇门&#xff0c;几乎所有的远程管理、文件传输、自动化部署都依赖…

作者头像 李华
网站建设 2026/7/5 4:48:36

轻量级可扩展日志框架-日志系统设计思路与前置知识

日志系统设计思路与前置知识 文章目录日志系统设计思路与前置知识一、日志系统的基本介绍日志系统功能日志系统实现二、前置基础知识2.1 C/C 不定参数2.2 设计模式及其六大原则单一职责原则开闭原则李氏替换原则依赖倒置原则迪米特法则接口隔离原则抽象与实现的设计原则2.3 单例…

作者头像 李华
网站建设 2026/7/5 4:44:36

2026笔记本避坑指南:低色域屏、8GB内存、赛扬CPU为何成体验地雷

1. 这不是“垃圾榜”&#xff0c;是2026年4月真实市场水位线下的避坑指南最近刷到好几条标题带“2026垃圾笔记本”的短视频&#xff0c;评论区吵得像菜市场——有人喊“小新14低配版就是电子垃圾”&#xff0c;有人回怼“你买得起高配版吗”。说实话&#xff0c;我看到这种标题…

作者头像 李华
网站建设 2026/7/5 4:43:48

奔驰曲轴皮带盘脱层,A级/GLA/GLB异响的来源

发动机前面传来有节奏的"哒哒哒"&#xff0c;换了皮带还响——问题可能不在皮带&#xff0c;在皮带盘。聊聊奔驰MFA2平台曲轴皮带盘脱层&#xff0c;这事在A级、GLA、GLB上出得不少。本文技术内容由专一奔驰维保中心技术团队提供——16年奔驰原厂经验&#xff0c;拆过…

作者头像 李华
网站建设 2026/7/5 4:42:02

老字号书法国画班,手残党也能变大师![特殊字符]✨

&#x1f914;&#x1f3a8; 手残党们&#xff0c;是不是总觉得自己拿笔的手就是不听使唤&#xff1f;别担心&#xff0c;今天就来给大家安利一个老字号书法国画班——翰韵书画社。在这里&#xff0c;即使是手最不灵活的朋友也能慢慢变成大师&#xff01;首先&#xff0c;咱们得…

作者头像 李华