首页 后端开发 C#.Net教程 asp.net uploadify实现多附件上传功能

asp.net uploadify实现多附件上传功能

Dec 20, 2016 pm 02:11 PM

本文实例为大家分享了asp.net uploadify多附件上传的方法,供大家参考,具体内容如下

1、说明

  uploadify是一款优秀jQuery插件,主要功能是批量上传文件。大多数同学对多附件上传感到棘手,现将asp.net结合uploadfiy如何实现批量上传附件给大家讲解一下,有什么不对的地方还请大家多多交流沟通,下面把代码贴出来大家一起交流。

2、组成

首先说明一下代码实现所用到的技术,仅供参考:

    开发工具:vs2010

    目标框架:.NET Framework3.5

    Uploadify:uploadify-v3.1

    Jquery:jquery-1.8.1.js

最后我会将整个Demo上传,如果同学们的电脑上有开发环境可直接打开项目解决方案运行。

3、代码

Default.aspx(测试页面)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FileUpload._Default" %>
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title>附件上传</title>
 <script src="Scripts/jquery-1.8.1.js" type="text/javascript"></script>
 <script src="Scripts/uploadify-v3.1/jquery.uploadify-3.1.js" type="text/javascript"></script>
 <link href="Scripts/uploadify-v3.1/uploadify.css" rel="stylesheet" type="text/css" />
 <script type="text/javascript">
 $(function () {
  $("#file_upload").uploadify({
  "auto": false,
  "swf": "Scripts/uploadify-v3.1/uploadify.swf",
  "uploader": "App_Handler/Uploadify.ashx?action=upload",
  "removeCompleted": false,
  "onUploadSuccess": function (file, data, response) {
   alert(&#39;文件 &#39; + file.name + &#39; 已经上传成功,并返回 &#39; + response + &#39; 服务器状态 &#39; + data);
  }
  });
 });
 </script>
</head>
<body>
 <form id="form1" runat="server">
 <div>
 <input type="file" id="file_upload" name="file_upload" />
 </div>
 <div>
 <a href="javascript:$(&#39;#file_upload&#39;).uploadify(&#39;upload&#39;);">上传第一个</a>
 <a href="javascript:$(&#39;#file_upload&#39;).uploadify(&#39;upload&#39;,&#39;*&#39;);">上传队列</a>
 <a href="javascript:$(&#39;#file_upload&#39;).uploadify(&#39;cancel&#39;);">取消第一个</a>
 <a href="javascript:$(&#39;#file_upload&#39;).uploadify(&#39;cancel&#39;, &#39;*&#39;);">取消队列</a>
 </div>
 </form>
</body>
</html>
登录后复制



Uploadify.ashx(一般处理程序)

<%@ WebHandler Language="C#" Class="UploadifyUpload" %>
  
using System;
using System.Collections;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.SessionState;
using System.IO;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Text;
  
public class UploadifyUpload : IHttpHandler, IRequiresSessionState
{
  
 public void ProcessRequest(HttpContext context)
 {
 context.Response.ContentType = "text/plain";
 context.Response.Charset = "utf-8";
  
 string action = context.Request["action"];
 switch (action)
 {
  case "upload":
  //上传附件
  upload(context);
  break;
 }
 context.Response.End();
 }
  
 /// <summary>
 /// 上传附件
 /// </summary>
 /// <param name="context"></param>
 private void upload(HttpContext context)
 {
 HttpPostedFile postedFile = context.Request.Files["Filedata"];
 if (postedFile != null)
 {
  string fileName, fileExtension;
  int fileSize;
  fileName = postedFile.FileName;
  fileSize = postedFile.ContentLength;
  if (fileName != "")
  {
  
  fileExtension = postedFile.FileName.Substring(postedFile.FileName.LastIndexOf(&#39;.&#39;));
  string path =context.Server.MapPath("/")+ "\\App_Attachments\\";//设置文件的路径
  string fileUrl = path + DateTime.Now.ToString("yyyyMMddHHmmss") + fileExtension;//保存文件路径
  if (!Directory.Exists(path)) {
   Directory.CreateDirectory(path);
  }
  postedFile.SaveAs(fileUrl);//先保存源文件
  
  
  context.Response.Write("上传成功!");
  
  }
  else
  {
  context.Response.Write("上传失败!");
  }
 }
 else
 {
  context.Response.Write("上传失败!");
 }
 }
  
 public bool IsReusable
 {
 get
 {
  return false;
 }
 }
  
}
登录后复制


  

4、补充

  给大家贴出一些uploadfiy参数的讲解,使用方法就是在Default.aspx测试页面里面$("#file_upload").uploadify({});方法中配置,不论参数或事件配置要以英文状态下的逗号结束,最后一个不需要逗号结束。类似于下图


详细参数如下:

// 所需的参数
id: $this.attr(&#39;id&#39;), // DOM对象的ID
  
swf: &#39;Scripts/jquery-uploadify/uploadify.swf&#39;, // uploadify.swf 文件的路径
  
uploader: &#39;App_Handler/Uploadify.ashx&#39;, // 后台处理程序的相对路径
  
auto: false, // 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传,这里执行doUpload()方法
  
buttonClass: &#39;&#39;, // 按钮样式
  
buttonCursor: &#39;hand&#39;, // 鼠标指针悬停在按钮上的样子
  
buttonImage: null, // 浏览按钮的图片的路径
  
buttonText: &#39;选择文件&#39;, // 浏览按钮的文本
  
checkExisting: false, // 文件上传重复性检查程序,检查即将上传的文件在服务器端是否已存在,存在返回1,不存在返回0
  
debug: false, // 如果设置为true则表示启用SWFUpload的调试模式
  
fileObjName: &#39;Filedata&#39;, // 文件上传对象的名称,如果命名为&#39;the_files&#39;,PHP程序可以用$_FILES[&#39;the_files&#39;]来处理上传的文件对象
  
fileSizeLimit: &#39;5MB&#39;, // 上传文件的大小限制 ,如果为整数型则表示以KB为单位的大小,如果是字符串,则可以使用(B, KB, MB, or GB)为单位,比如&#39;2MB&#39;;如果设置为0则表示无限制
  
fileTypeDesc: &#39;支持的格式:&#39;, // 这个属性值必须设置fileTypeExts属性后才有效,用来设置选择文件对话框中的提示文本,如设置fileTypeDesc为“请选择rar doc pdf文件”
  
fileTypeExts: &#39;*.*&#39;, // 设置可以选择的文件的类型,格式如:&#39;*.doc;*.pdf;*.rar&#39;
  
height: 24, // 设置浏览按钮的高度 ,默认值
  
itemTemplate: false, // 用于设置上传队列的HTML模版,可以使用以下标签:instanceID – Uploadify实例的ID fileID – 列队中此文件的ID,或者理解为此任务的ID fileName – 文件的名称 fileSize – 当前上传文件的大小 插入模版标签时使用格式如:${fileName}
  
method: &#39;post&#39;, // 提交方式Post或Get
  
multi: true, // 设置为true时可以上传多个文件
  
formData: { &#39;action&#39;: &#39;upload&#39; }, // AnJSON格式上传每个文件的同时提交到服务器的额外数据,可在&#39;onUploadStart&#39;事件中使用&#39;settings&#39;方法动态设置
  
preventCaching: true, // 如果为true,则每次上传文件时自动加上一串随机字符串参数,防止URL缓存影响上传结果
  
progressData: &#39;percentage&#39;, // 设置上传进度显示方式,percentage显示上传百分比,speed显示上传速度
  
listID: false, // 设置附件列表容器DOM元素的ID
  
queueID: false, // 设置上传队列容器DOM元素的ID,如果为false则自动生成一个队列容器
  
queueSizeLimit: 999, // 队列最多显示的任务数量,如果选择的文件数量超出此限制,将会出发onSelectError事件。注意此项并非最大文件上传数量,如果要限制最大上传文件数量,应设置uploadLimit
  
removeCompleted: false, // 是否自动将已完成任务从队列中删除,如果设置为ture则会从队列中移除
  
removeTimeout: 3, // 如果设置了任务完成后自动从队列中移除,则可以规定从完成到被移除的时间间隔
  
requeueErrors: false, // 如果设置为true,则单个任务上传失败后将返回错误,并重新加入任务队列上传
  
successTimeout: 30, // 文件上传成功后服务端应返回成功标志,此项设置返回结果的超时时间
  
uploadLimit: 0, // 最大上传文件数量,如果达到或超出此限制将会触发onUploadError事件
  
width: 75, // 设置文件浏览按钮的宽度
登录后复制


设置的事件:

onDialogClose : function(swfuploadifyQueue) {//当文件选择对话框关闭时触发
  if( swfuploadifyQueue.filesErrored > 0 ){
  alert( &#39;添加至队列时有&#39;
  +swfuploadifyQueue.filesErrored
  +&#39;个文件发生错误n&#39;
  +&#39;错误信息:&#39;
  +swfuploadifyQueue.errorMsg
  +&#39;n选定的文件数:&#39;
  +swfuploadifyQueue.filesSelected
  +&#39;n成功添加至队列的文件数:&#39;
  +swfuploadifyQueue.filesQueued
  +&#39;n队列中的总文件数量:&#39;
  +swfuploadifyQueue.queueLength);
  }
}
  
onDialogOpen : function() {//当选择文件对话框打开时触发
  alert( &#39;Open!&#39;);
}
  
  
  
onSelect : function(file) {//当每个文件添加至队列后触发
  alert( &#39;id: &#39; + file.id
  + &#39; - 索引: &#39; + file.index
  + &#39; - 文件名: &#39; + file.name
  + &#39; - 文件大小: &#39; + file.size
  + &#39; - 类型: &#39; + file.type
  + &#39; - 创建日期: &#39; + file.creationdate
  + &#39; - 修改日期: &#39; + file.modificationdate
  + &#39; - 文件状态: &#39; + file.filestatus);
}
  
  
  
onSelectError : function(file,errorCode,errorMsg) {//当文件选定发生错误时触发
  alert( &#39;id: &#39; + file.id
  + &#39; - 索引: &#39; + file.index
  + &#39; - 文件名: &#39; + file.name
  + &#39; - 文件大小: &#39; + file.size
  + &#39; - 类型: &#39; + file.type
  + &#39; - 创建日期: &#39; + file.creationdate
  + &#39; - 修改日期: &#39; + file.modificationdate
  + &#39; - 文件状态: &#39; + file.filestatus
  + &#39; - 错误代码: &#39; + errorCode
  + &#39; - 错误信息: &#39; + errorMsg);
}
  
  
  
onQueueComplete : function(stats) {//当队列中的所有文件全部完成上传时触发
  alert( &#39;成功上传的文件数: &#39; + stats.successful_uploads
  + &#39; - 上传出错的文件数: &#39; + stats.upload_errors
  + &#39; - 取消上传的文件数: &#39; + stats.upload_cancelled
  + &#39; - 出错的文件数&#39; + stats.queue_errors);
}
  
  
  
onUploadComplete : function(file,swfuploadifyQueue) {//队列中的每个文件上传完成时触发一次
  alert( &#39;id: &#39; + file.id
  + &#39; - 索引: &#39; + file.index
  + &#39; - 文件名: &#39; + file.name
  + &#39; - 文件大小: &#39; + file.size
  + &#39; - 类型: &#39; + file.type
  + &#39; - 创建日期: &#39; + file.creationdate
  + &#39; - 修改日期: &#39; + file.modificationdate
  + &#39; - 文件状态: &#39; + file.filestatus
  + &#39; - 出错的文件数: &#39; + swfuploadifyQueue.filesErrored
  + &#39; - 错误信息: &#39; + swfuploadifyQueue.errorMsg
  + &#39; - 要添加至队列的数量: &#39; + swfuploadifyQueue.filesSelected
  + &#39; - 添加至对立的数量: &#39; + swfuploadifyQueue.filesQueued
  + &#39; - 队列长度: &#39; + swfuploadifyQueue.queueLength);
}
  
  
  
onUploadError : function(file,errorCode,errorMsg,errorString,swfuploadifyQueue) {//上传文件出错是触发(每个出错文件触发一次)
  alert( &#39;id: &#39; + file.id
  + &#39; - 索引: &#39; + file.index
  + &#39; - 文件名: &#39; + file.name
  + &#39; - 文件大小: &#39; + file.size
  + &#39; - 类型: &#39; + file.type
  + &#39; - 创建日期: &#39; + file.creationdate
  + &#39; - 修改日期: &#39; + file.modificationdate
  + &#39; - 文件状态: &#39; + file.filestatus
  + &#39; - 错误代码: &#39; + errorCode
  + &#39; - 错误描述: &#39; + errorMsg
  + &#39; - 简要错误描述: &#39; + errorString
  + &#39; - 出错的文件数: &#39; + swfuploadifyQueue.filesErrored
  + &#39; - 错误信息: &#39; + swfuploadifyQueue.errorMsg
  + &#39; - 要添加至队列的数量: &#39; + swfuploadifyQueue.filesSelected
  + &#39; - 添加至对立的数量: &#39; + swfuploadifyQueue.filesQueued
  + &#39; - 队列长度: &#39; + swfuploadifyQueue.queueLength);
}
  
  
  
onUploadProgress : function(file,fileBytesLoaded,fileTotalBytes,
queueBytesLoaded,swfuploadifyQueueUploadSize) {//上传进度发生变更时触发
alert( &#39;id: &#39; + file.id
  + &#39; - 索引: &#39; + file.index
  + &#39; - 文件名: &#39; + file.name
  + &#39; - 文件大小: &#39; + file.size
  + &#39; - 类型: &#39; + file.type
  + &#39; - 创建日期: &#39; + file.creationdate
  + &#39; - 修改日期: &#39; + file.modificationdate
  + &#39; - 文件状态: &#39; + file.filestatus
  + &#39; - 当前文件已上传: &#39; + fileBytesLoaded
  + &#39; - 当前文件大小: &#39; + fileTotalBytes
  + &#39; - 队列已上传: &#39; + queueBytesLoaded
  + &#39; - 队列大小: &#39; + swfuploadifyQueueUploadSize);
}
  
  
  
onUploadStart: function(file) {//上传开始时触发(每个文件触发一次)
  alert( &#39;id: &#39; + file.id
  + &#39; - 索引: &#39; + file.index
  + &#39; - 文件名: &#39; + file.name
  + &#39; - 文件大小: &#39; + file.size
  + &#39; - 类型: &#39; + file.type
  + &#39; - 创建日期: &#39; + file.creationdate
  + &#39; - 修改日期: &#39; + file.modificationdate
  + &#39; - 文件状态: &#39; + file.filestatus );
}
  
onUploadSuccess : function(file,data,response) {//上传完成时触发(每个文件触发一次)
  alert( &#39;id: &#39; + file.id
  + &#39; - 索引: &#39; + file.index
  + &#39; - 文件名: &#39; + file.name
  + &#39; - 文件大小: &#39; + file.size
  + &#39; - 类型: &#39; + file.type
  + &#39; - 创建日期: &#39; + file.creationdate
  + &#39; - 修改日期: &#39; + file.modificationdate
  + &#39; - 文件状态: &#39; + file.filestatus
  + &#39; - 服务器端消息: &#39; + data
  + &#39; - 是否上传成功: &#39; + response);
  
}
登录后复制

5、最后奉上Demo:FileUpload

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1431
52
Laravel 教程
1333
25
PHP教程
1279
29
C# 教程
1257
24
c#.net的持续相关性:查看当前用法 c#.net的持续相关性:查看当前用法 Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因为它提供了强大的工具和库,支持多种应用开发。1)C#结合.NET框架,使开发高效便捷。2)C#的类型安全和垃圾回收机制增强了其优势。3).NET提供跨平台运行环境和丰富的API,提升了开发灵活性。

C#作为多功能.NET语言:应用程序和示例 C#作为多功能.NET语言:应用程序和示例 Apr 26, 2025 am 12:26 AM

C#在企业级应用、游戏开发、移动应用和Web开发中均有广泛应用。1)在企业级应用中,C#常用于ASP.NETCore开发WebAPI。2)在游戏开发中,C#与Unity引擎结合,实现角色控制等功能。3)C#支持多态性和异步编程,提高代码灵活性和应用性能。

将C#.NET应用程序部署到Azure/AWS:逐步指南 将C#.NET应用程序部署到Azure/AWS:逐步指南 Apr 23, 2025 am 12:06 AM

如何将C#.NET应用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。1.在Azure上,使用AzureAppService和AzurePipelines自动化部署。2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda实现部署和无服务器计算。

C#和.NET运行时:它们如何一起工作 C#和.NET运行时:它们如何一起工作 Apr 19, 2025 am 12:04 AM

C#和.NET运行时紧密合作,赋予开发者高效、强大且跨平台的开发能力。1)C#是一种类型安全且面向对象的编程语言,旨在与.NET框架无缝集成。2).NET运行时管理C#代码的执行,提供垃圾回收、类型安全等服务,确保高效和跨平台运行。

C#.NET:使用.NET生态系统构建应用程序 C#.NET:使用.NET生态系统构建应用程序 Apr 27, 2025 am 12:12 AM

如何利用.NET构建应用?使用.NET构建应用可以通过以下步骤实现:1)了解.NET基础知识,包括C#语言和跨平台开发支持;2)学习核心概念,如.NET生态系统的组件和工作原理;3)掌握基本和高级用法,从简单控制台应用到复杂的WebAPI和数据库操作;4)熟悉常见错误与调试技巧,如配置和数据库连接问题;5)应用性能优化与最佳实践,如异步编程和缓存。

.NET框架与C#:解码术语 .NET框架与C#:解码术语 Apr 21, 2025 am 12:05 AM

.NETFramework是一个软件框架,C#是一种编程语言。1..NETFramework提供库和服务,支持桌面、Web和移动应用开发。2.C#设计用于.NETFramework,支持现代编程功能。3..NETFramework通过CLR管理代码执行,C#代码编译成IL后由CLR运行。4.使用.NETFramework可快速开发应用,C#提供如LINQ的高级功能。5.常见错误包括类型转换和异步编程死锁,调试需用VisualStudio工具。

C#.NET开发:入门的初学者指南 C#.NET开发:入门的初学者指南 Apr 18, 2025 am 12:17 AM

要开始C#.NET开发,你需要:1.了解C#的基础知识和.NET框架的核心概念;2.掌握变量、数据类型、控制结构、函数和类的基本概念;3.学习C#的高级特性,如LINQ和异步编程;4.熟悉常见错误的调试技巧和性能优化方法。通过这些步骤,你可以逐步深入C#.NET的世界,并编写高效的应用程序。

c#和.net:了解两者之间的关系 c#和.net:了解两者之间的关系 Apr 17, 2025 am 12:07 AM

C#和.NET的关系是密不可分的,但它们不是一回事。C#是一门编程语言,而.NET是一个开发平台。C#用于编写代码,编译成.NET的中间语言(IL),由.NET运行时(CLR)执行。

See all articles