gpt4 book ai didi

asp.net mvc 实现文件上传带进度条的思路与方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章asp.net mvc 实现文件上传带进度条的思路与方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

文件上传与下载的操作在实际项目中经常是很重要的一个内容,在使用ASP.NET Web Form的时候我们可以使用诸多的服务器控件,FileIpload就是其中之一,但是在ASP.NET不建议使用那些服务器控件,因为那样违反三层架构原则。最近参考网络资料,学习了ASP.NET MVC如何上传文件。 而这篇文章主要重点是asp.net mvc 实现文件上传带进度条,下面来一起看看吧.

实现思路 。

ajax异步上传文件,且开始上传文件的时候启动轮询来实时获取文件上传进度。保存进度我采用的是memcached缓存,因为项目其他地方也用了的,所以就直接用这个啦。注意:不能使用session来保存进度,因为session是线程安全的不能实时获取进度,可是试试httpcache或者memorycache,这两个我没有试过,请自行尝试.

ps:使用websocket来实现也是不错的,不过我没有试过,有心的大神可以去试试.

下面贴效果图:

asp.net mvc 实现文件上传带进度条的思路与方法

实现方法如下 。

前端ajax上传文件,我使用了两种jq插件。一种是ajaxfileupload,一种是jquery.form.js(如需下载,请百度).

下面的代码是ajaxFileUpload的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$.ajaxFileUpload
  (
  {
  url: '/WxManage/Media/UploadImage' , //用于文件上传的服务器端请求地址
  secureuri: false , //是否需要安全协议,一般设置为false
  fileElementId: 'postFile' , //文件上传域的ID
  type: "post" ,
  dataType: 'json' , //返回值类型 一般设置为json
  success: function (data, status) //服务器成功响应处理函数
  {
  CloseProgressbar(); //关闭进度条 设置进度条进度为100
  if (data.status == 1) {
   layer.msg(data.msg, { icon: 1, time: 1000 }, function () {
   parent.location.reload();
   });
  } else {
   $( "#btnUploadFile" ).attr( "disabled" , false );
   layer.msg(data.msg, { icon: 2, time: 1000 });
  }
  },
  error: function (data, status, e) //服务器响应失败处理函数
  {
  $( "#btnUploadFile" ).attr( "disabled" , false );
  CloseProgressbar();
  layer.closeAll( "dialog" );
  layer.msg( "上传失败" , { icon: 2, time: 1000 });
  }
  }
  );

后端接收文件上传请求的action:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[HttpPost]
  public ActionResult UploadImage(HttpPostedFileBase postFile)
  {
  if (postFile == null )
  {
  return Json(BasicConfig.MessageConfig.Fail( "上传文件不得为空" ));
  }
 
  try
  {
  string format = postFile.FileName.Split( '.' ).Last(); //后缀名
  SaveFile(postFile);
  return Json(BasicConfig.MessageConfig.Success( "上传成功" ));
  }
  catch (Exception ex)
  {
  return Json(BasicConfig.MessageConfig.Fail( "上传失败" ));
  }
  }

SaveFile方法是保存文件的方法,采用的是文件流方式保存以便于计算上传进度:

核心代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
FileStream fs = new FileStream(fileSavePath, FileMode.Create);
  BinaryWriter bw = new BinaryWriter(fs);
  BinaryReader br = new BinaryReader(postFile[i].InputStream);
 
  int readCount = 0; //单次读取的字节数
  while ((readCount = br.Read(bufferByte, 0, readBufferSize)) > 0)
  {
   bw.Write(bufferByte, 0, readCount); //写入字节到文件流
   bw.Flush();
   saveCount += readCount; //已经上传的进度
   mem.SetValue( "Admin_UploadSpeed_" + Session.SessionID, (saveCount * 1.0 / totalCount).ToString( "0.00" ), 60); //将更新到memcached缓存中
   Thread.Sleep(200); //为了看到明显的过程故意暂停
  }

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我的支持.

最后此篇关于asp.net mvc 实现文件上传带进度条的思路与方法的文章就讲到这里了,如果你想了解更多关于asp.net mvc 实现文件上传带进度条的思路与方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com