Asp.Net 上传大文件专题(4)--利用ajax技术显示上传进度
======================================================
注:本文源代码点此下载
======================================================
asp.net 上传大文件专题(4)--利用ajax技术显示上传进度
回顾上一篇:
我们介绍了如何从http请求流中将数据部分进行截取,同时将数据相关信息进行保存。
本篇概述:
用过ajax的朋友应该有听过xmlhttprequest对象,ajax其实就是通过xmlhttprequest对象来向服务器发出异步请求,并从服务器获得数据,然后用javascript来操作dom而更新页面。
本篇就是要通过xmlhttprequest对象来实现实时的进度显示。
效果图:
正文部分:
看过有些前辈的做法是通过设置http请求的refresh头字段来定时刷新页面从而显示进度,但是这样就会带动整个页面一起刷新,就算我们把进度条做成单独的页面,效果仍旧不是太好。我之前试过用ajax的timer组件,但是不知道是何原因,timer控件在iis下预览时总是无法正常发挥作用。苦恼了好一阵子,怀疑是ms的bug。最后发现了一个很好的替代办法就是利用xmlhttprequest对象来自己实现定时刷新,这样每次只需向服务器请求很少的数据,减少了对服务器的压力,在后期的测试中,发现这个办法确实很好用,而且在iis下也一切正常(上图就是iis下运行的效果)。
当然如果光有进度条没有数据,那这个进度条也只能是个摆设,所以我把接下来的内容分成两块:进度信息的保存、进度的显示
1、进度信息的保存
首先我们要明白进度条在这里反应的是什么的进度?毫无疑问是文件上传的进度喽~~在上一篇中,我们对上传的文件数据进行了提取,也就是说这个提取的进度就是我们要显示给客户端的进度。那就简单了,我们只要把已经提取的文件大小与总的文件大小比对一下,就可以知道完成的百分比了。可是问题来了,我们如何知道上传了多少了呢?答案肯定是要用一个变量来保存已经上传的数据量。那这个变量要放在哪里才能让我们既可以在进度页面中访问,又可以在http上传模块中访问呢?
大家肯定知道一般情况下,用户在多个页面之间访问,会用到session对象或url传值来进行页面之前的通信。但是前一篇所介绍的http模块并不属于一个页面,因此我们无法简单的应用session让进度页面与上传模块实现通信。这里主要还是借鉴高山来客的思路:首先构建一个用于存放文件信息的类,该类主要用来保存文件信息,如:文件名,路径,当前上传的数据量,上传时间等。然后设置一个针对某次上传的唯一id做为页面中通信的暗号,拥有这个暗号的页面才能获取对应于某次上传的文件信息。现在已经有了两个变量了,接着就要使这两个变量可以被多个页面所使用,方法就是在上传页面中,将这个id变量注册为该页面的一个隐藏域,这样包含这个页面的http请求流中就会包含那个上传id。另一个类变量就保存在页面缓存cache中,并用上传id做为其编号。
现在假设已经有了这么一个用于存放文件信息的类uploadfileinfo。
首先我们要在上传页面的pageload中new一个id,然后注册一个隐藏域用来保存此id,同时实例化uploadfileinfo类,并将相应的信息写入该类,最后把该类放入cache:
if (!ispostback)
{
uploadfileinfo ufi = new uploadfileinfo();
ufi.strfileguid = guid.newguid().tostring;//用guid来表示唯一的id;
ufi.strtempdir = server.mappath("tempupload/" + ufi.strfileguid + "//");
clientscript.registerhiddenfield("uploadid", ufi.strfileguid);//隐藏域,名字为uploadid,值为ufi.strfileguid
httpcontext.current.cache.add(ufi.strfileguid, ufi, null, datetime.now.adddays(10), timespan.zero, system.web.caching.cacheitempriority.high, null);//加入到catch中
}
经过以上步骤,我们就可以在http模块中访问了。
因为在这次的http请求流中包含了一个隐藏域,所以我们可以对获取的http请求流进行分析,从而获取相应的上传id,也就是我们之前说的暗号。然后通过cache的编号找到cache中的文件信息对象,从而我们可以在后来的数据读取过程中对该对象的上传数据量进行修改。由于是放在cache中,加之是一个引用对象,所以对该对象修改后,其它代码访问到的都是最新的值。
string sguid = getuploadid(bpreloadedenititybody, econtentencode);//getuploadid是自己写的一个方法用来从请求流中获取上传id
uploadfileinfo ufifileinfo = (uploadfileinfo)httpcontext.current.cache[sguid];//取出文件信息对象
其它页面如果要使用这个对象就得先获取id,之后就可以自由操作了。
2、进度的显示
从图中我们可以看到,当显示进度的时候,背后的页面成灰色,并且无法响应任何事件,有点类似模态窗口。这个效果大家可以在网上查查,还是挺容易实现的。我这里有一段js显示此效果的代码(搜集于网上):
modaldialog
function modaldialog(name,divid,width,height,leftop,topop,color)
{
this.name=name;//名称
this.div=divid;//要放入窗体中的元素名称
this.width=width;//窗体宽
this.height=height;//窗体高
this.leftop=leftop;//左侧位置
this.topop=topop;//上部位置
this.color=color;//整体颜色
this.show=function()//显示窗体
{
document.all(obj.name+"_divshow").style.width=obj.width;
document.all(obj.name+"_divshow").style.height=obj.height;
document.all(obj.name+"_divshow").style.left=obj.leftop;
document.all(obj.name+"_divshow").style.top=obj.topop;
document.all(obj.name+"_mask").style.width=document.body.clientwidth;
document.all(obj.name+"_mask").style.height=document.body.clientheight;
document.all(obj.name+"_divshow").style.visibility="visible";
document.all(obj.name+"_mask").style.visibility="visible";
}
this.close=function()//关闭窗体
{
document.all(obj.name+"_divshow").style.width=0;
document.all(obj.name+"_divshow").style.height=0;
document.all(obj.name+"_divshow").style.left=0;
document.all(obj.name+"_divshow").style.top=0;
document.all(obj.name+"_mask").style.width=0;
document.all(obj.name+"_mask").style.height=0;
document.all(obj.name+"_divshow").style.visibility="hidden";
document.all(obj.name+"_mask").style.visibility="hidden";
}
this.tostring=function()
{
var tmp="
"+this.name+"_divshow' style='position:absolute; left:0; top:0;z-index:10; visibility:hidden;width:0;height:0'>";
tmp+="";
tmp+="
";
tmp+="
"+this.name+"_content' valign=top >";
tmp+=""
tmp+="";
tmp+="
";
tmp+="
"+this.name+"_mask' style='position:absolute; top:0; left:0; width:0; height:0; background:#666; filter:alpha(opacity=50); z-index:9; visibility:hidden'>
";
document.write(tmp);
document.all(this.name+"_content").insertbefore(document.all(this.div));
}
var obj=this;
}
接着讲我们的重点:如何实现定时局部刷新。
关于xmlhttprequest对象,我这里就不详细讲述了,提供大家一个关于此的手册下载。为了大家更容易理解,我举个小例子:
小例子
//页面a.aspx
function returnresponse(url)
{
var xmlhttp = new activexobject('msxml2.xmlhttp');
if(xmlhttp!=null)
{
xmlhttp.open("get",url,true);//向url指定的页面发送get请求
xmlhttp.onreadystatechange=function()
{//当xmlhttp的readystate改变的时候就会引发这个事件
if(xmlhttp.readystate==4&& xmlhttp.status == 200)
{ //4 = "成功发送",200 = "所请求的页面返回正常"
temp=xmlhttp.responsetext;//接收所请求页面发回的数据
alert(temp);
}
}
xmlhttp.send(null);
}
else
{
alert("浏览器不支持xmlhttp.");
}
}
//url所指向的页面b的代码.cs,当然也可以是同一个页面的cs
if(request.querystring["event"]=="test")
{
response.write("测试");
}
/**//*
然后我们在a页中执行returnresponse(b.aspx?event="test");
很快就会发现在a页中弹出一个窗口,内容是"测试"。
*/
通过以上小例子,大家应该已经对该对象有所了解了吧。为实现定时刷新,我把进度条单独放在一个页面中(如a.aspx),通过js的settimeout来定时执行类似returnresponse这样的方法,然后在a.aspx.cs代码中获取文件信息对象,接着通过response来反馈进度信息。这样在a.aspx页面中就可以获取到信息,并进行显示了。但是执行activexobject将要花费不少代价,而且我们是定时执行该方法,显然会造成性能下降。在参考了构建一个pool来管理无刷新页面的xmlhttp对象后,决定采用这一方法,事实证明该方法确实有效。
利用pool后的代码
function xmlhttppoolfactory()
{
this.xmlhttppool = new array();
this.maxpoollength = 10;
this.add=function()
{
if ( this.xmlhttppool.lengththis.maxpoollength )
{
xmlhttp=null;
if (window.xmlhttprequest)
{// code for all new browsers
xmlhttp=new xmlhttprequest();
}
else if (window.activexobject)
{// code for ie5 and ie6
try
{
xmlhttp = new activexobject('msxml2.xmlhttp');
}
catch(e)
{
try
{
xmlhttp = new activexobject('microsoft.xmlhttp');
}
catch(e2)
{
}
}
}
if ( xmlhttp!=null )
{
this.xmlhttppool.push(xmlhttp);
}
return xmlhttp;
}
};
this.getxmlhttp = function()
{
var xmlhttp = null;
var pool = this.xmlhttppool;
for ( var i=0 ; ipool.length ; ++i )
{
if ( pool[i].readystate == 4 || pool[i].readystate == 0 )
{
xmlhttp = pool[i];
break;
}
}
if ( xmlhttp == null )
{
return this.add();
}
return xmlhttp;
};
this.returnresponse= function(url,div)
{
var xmlhttp = this.getxmlhttp();
var param = div.split(',');
if(xmlhttp!=null)
{
xmlhttp.open("get",url,true);
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readystate==4&& xmlhttp.status == 200)
{ //4 = "loaded",200 = "ok"
temp=xmlhttp.responsetext;
var temparray = temp.split(",");
document.getelementbyid(param[0]).innertext=temparray[0];
document.getelementbyid(param[1]).innertext=temparray[1]+"kb/s";
document.getelementbyid(param[2]).innerhtml=""+temparray[2]*3+"'>
";
document.getelementbyid(param[3]).innertext=temparray[2]+"%";
}
}
xmlhttp.send(null);
}
else
{
alert("your browser does not support xmlhttp.");
}
};
this.aportall = function()
{
for ( var i=0 ; ithis.xmlhttppool.length ; ++i )
{
this.xmlhttppool[i].abort();
}
};
}
var a = new xmlhttppoolfactory();//建立一个全局的工厂实例
var strevent = "";
function refresh(url,interval,div)
{//该方法我用来定时刷新,因为除了settimeout还有一些其它活要干
var str1 = "";
for(i=2;iarguments.length;i++)
{//因为可能需要刷新的div不只一个,所以利用js的arguments来解决动态参数的问题
if(i!=arguments.length-1)
{
str1 = str1 +arguments[i]+",";
}
else
{
str1 = str1 +arguments[i];
}
}
a.returnresponse(url,str1);//调用该方法实现异部通信
var str="";
for(i=0;iarguments.length;i++)
{
if(i!=arguments.length-1)
str = str + "'"+arguments[i]+"',";
else
str = str+"'"+arguments[i]+"'";
}
settimeout("refresh("+str+")", interval );//定时执行该方法
}
到这就差不多整个专题都结束了,接下来几天,我会把代码稍微调整下,然后传上来。
由于这段时间要上班,实在抽不出时间来整理,如果大家需要可以先拿去看看。不过代码写的有点乱,而且有些功能也没有完善,时间实在太少,大家见谅。
粗糙的工程
绿色通道:好文要顶关注我收藏该文与我联系
posted on 2008-08-04 16:35 stg609 阅读(10474) 评论(56)编辑 收藏
发表评论
2241253
回复 引用 查看
#1楼 2008-08-04 16:49 | netcorner
太复杂,用swfupload简单多了!
回复 引用 查看
#2楼 2008-08-04 17:02 | 足够有晋
样子很漂亮。
回复 引用 查看
#3楼[楼主] 2008-08-04 17:07 | stg609
--引用--------------------------------------------------
netcorner: 太复杂,用swfupload简单多了!
--------------------------------------------------------
恩,本人做这个主要还是为了学习。
回复 引用 查看
#4楼 2008-08-04 17:19 | 莫耶
slickupload早已解决这个问题了
呵呵~
回复 引用
#5楼 2008-08-04 17:38 | xue[未注册用户]
学习!
回复 引用 查看
#6楼 2008-08-04 18:12 | 谦虚的天下
很好,很强大!
回复 引用 查看
#7楼 2008-08-04 19:50 | 蓝色海岸线
不错,学习了!
回复 引用
#8楼 2008-08-04 20:31 | bucuo[未注册用户]
不错,学习!
回复 引用 查看
#9楼 2008-08-05 04:12 | 怪怪
你这个系列很好, 把非swf的方案基本说到位了,过去像你这么完整的, 似乎只有英文文章~
顶一下
回复 引用
#10楼 2008-08-05 08:55 | 1412[未注册用户]
学习了
回复 引用 查看
#11楼 2008-08-05 10:43 | 赖文华(swpu小赖)
顶一下!
回复 引用
#12楼 2008-08-05 12:21 | 0574[未注册用户]
好文章,学习
回复 引用
#13楼 2008-08-05 12:49 | 天天他[未注册用户]
发个完整的项目包 试试呢.
回复 引用 查看
#14楼 2008-08-05 16:14 | martin(高超)
x效果不错类
回复 引用 查看
#15楼 2008-08-05 17:19 | 隐姓埋名
lz `
你的包 还没整理好啊!
回复 引用 查看
#16楼[楼主] 2008-08-05 22:24 | stg609
实在抱歉呀,最近没时间整理了,我已经把最原始的工程传上去了,如果大家需要的话,可以去下。
回复 引用
#17楼 2008-08-07 12:06 | scro[未注册用户]
好东西.谢谢楼主
回复 引用 查看
#18楼 2008-08-07 14:09 | 游侠_1
很鄙视一些人泼冷水,我相信楼主不会自己在项目运用这个东西,但我佩服楼主的钻研精神,做这种东西不再于和别的(如swfupload之类比较),在于对新事务的学习与理解钦佩这种学习的态度
回复 引用
#19楼 2008-08-07 17:16 | magic_lf[未注册用户]
楼主很强,佩服你的钻研精神
回复 引用
#20楼 2008-08-07 21:19 | topb[未注册用户]
支持楼主!!!
回复 引用 查看
#21楼 2008-08-18 16:20 | 蔺文龙
实在是佩服楼主的钻研精神,如今像楼主这样有钻研精神的人,真的不多了!
最近我也在研究这方面的东西
还是希望楼主百忙之中能抽时间,发份比较完整和完善的包供大家学习
回复 引用 查看
#22楼 2008-08-18 16:21 | 蔺文龙
另外问一下
楼主有没有在较正式的环境里测试过
上传500m~1g左右的文件的效果?
回复 引用 查看
#23楼[楼主] 2008-08-18 21:39 | stg609
谢谢支持,不过目前实在是抽不出时间去整理,大家只好先将就下。另外你所指的正式环境是什么?由于条件有限,我目前只在本机测试过,上传过400m多的视频,没有问题。500m以上未曾测试
回复 引用 查看
#24楼 2008-09-02 17:11 | 亦续缘
怎么没看到你说的效果???
回复 引用
#25楼 2008-09-03 17:26 | 萧萧落幕[未注册用户]
楼主啊,帮帮忙啊,找了好久的东西,被你写的那好,对于我等菜鸟来说好东西啊,
搞了半天硬是没在本机上运行起来,拜托楼主整理下,发到我的邮箱,最好是vs05的工程目录,我刚学,见笑。。。
回复 引用 查看
#26楼[楼主] 2008-09-04 12:48 | stg609
谢谢支持,我提供给大家的这个就是完整的vs05的工程文件。不过,实在抱歉,目前还没有精力去整理。
回复 引用
#27楼 2008-09-11 19:26 | weir55[未注册用户]
博主,请教个问题
为什么我运行一直报0001错误啊
回复 引用
#28楼 2008-09-16 09:18 | x-index[未注册用户]
写的很清楚!
回复 引用 查看
#29楼 2008-09-26 11:13 | 时之砂
怎么有時候上传不成功显示0004,
我debug一开始停止,再上传时debug
上传时提示我不支持support xmlhttp,但是上传成功了!
我的环境:vs2005; net2.0; asp.net ajax;繁体操作系统!
回复 引用
#30楼 2008-11-25 10:34 | liwei783[未注册用户]
楼主,我下了代码运行不了.老是说 if (ufi2.strextensionname == string.empty || ufi2.itotalbytes == 0)
{
response.redirect("uploadresult.aspx?info=error&code=" + errorcodes.err_0003);
}
对不起,由于网络拥挤或服务器忙,暂时无法上传,请稍后再试 麻烦你发一份好的到我油箱 可以吗 谢谢楼主
回复 引用
#31楼 2008-12-15 15:58 | hoho[未注册用户]
不错啊.楼主是好人,做人很厚道,还把源码提供给大家,好人也!支持你!写的很好!
回复 引用
#32楼 2008-12-15 16:01 | hoho[未注册用户]
对于一些人说自己已经解决了,比什么什么的差,那我觉得你完全没必要过来看!顶楼主!
回复 引用
#33楼 2008-12-15 17:50 | hoho[未注册用户]
楼主,我可以上传,但进度条不动的,百分比也不动的,怎么回事呢?请赐教!
回复 引用
#34楼 2008-12-22 23:26 | amywen[未注册用户]
请问一下楼主,源码在哪下?能否发我邮箱,我找好久了.谢谢了!
回复 引用 查看
#35楼 2009-01-14 14:44 | yinix
楼主:很好,很强大,顶力支持!!!
回复 引用
#36楼 2009-02-04 22:56 | woradmen[未注册用户]
可以发一份完整的给我吗,谢谢楼主了
回复 引用
#37楼 2009-02-11 17:14 | 一个程序员[未注册用户]
不知道作者有没试过,附带的那个源码,不能上传小的文件,传上去都是空的
回复 引用
#38楼 2009-04-24 13:25 | 感恩[未注册用户]
不错爱益浅,太感谢了,现在也正在做一个要上传大文件的网站
再次谢谢了
回复 引用
#39楼 2009-05-05 18:09 | 很好很强大[未注册用户]
不错 我看过一个例子 没你这个复杂 感觉用滤镜做这个进度条显示不错
回复 引用
#40楼 2009-05-08 08:55 | 谢谢[未注册用户]
整个项目在哪儿啊?
回复 引用
#41楼 2009-05-08 23:25 | 黎族[未注册用户]
楼主,请问.我拿来用时就
var temparray = temp.split(",");
document.getelementbyid(param[0]).innertext=temparray[0];
报错,说.
microsoft jscript 运行时错误: 'document.getelementbyid(...)' 为空或不是对象
怎么回事啊.
回复 引用
#42楼 2009-05-10 01:22 | bleachli
lz:我用你那个调试一直都有问题.,可不可以发一个你修改了的给我,,发到我邮箱里..谢谢..急啊,,我现在很想学那个东西..
回复 引用
#43楼 2009-06-09 16:36 | luguo[未注册用户]
要是能多写点注释就好了,对于我这种初学者来说!!
回复 引用 查看
#44楼 2009-10-09 13:40 | feiyang
请教楼主一个问题,我运行源码,在ie8下面弹出框没有,而提示页面找不到?请问这是什么原因?
回复 引用 查看
#45楼 2009-10-11 15:45 | json-leaf
好帖要留名
回复 引用
#46楼 2009-10-12 17:04 | fdgdf[未注册用户]
首先感谢楼主!但有一个小问题,就是我在测试中,上传文件时进度条没有数据显示,我跟踪代码发现,在settimeout函数去刷新uploadprogress这个页面时,调用不到uploadprogress页面的page_load(),请问这是为什么?
回复 引用 查看
#47楼 2009-11-30 18:34 | joylee
绝对的好文,只知道用别人封装好的东西,而不去想实现的原理怎么能进步
回复 引用 查看
#48楼 2010-04-29 22:55 | 郭志良
下载下来的源码 怎么那么多错误啊 我是菜鸟,调了老半天 也没整好, 有更完整的版本吗? 能发给我吗?真的很需要。。。
我邮箱:shengxiwgzly@139.com
谢谢了!!!!!
回复 引用 查看
#49楼 2010-05-28 11:19 | plcc
楼主,我下了代码运行不了.老是说 if (ufi2.strextensionname == string.empty || ufi2.itotalbytes == 0)
{
response.redirect("uploadresult.aspx?info=error&code=" + errorcodes.err_0003);
}
对不起,由于网络拥挤或服务器忙,暂时无法上传,请稍后再试 麻烦你发一份好的到我油箱 可以吗 谢谢楼主
274947209@qq.com
回复 引用 查看
#50楼 2010-07-21 18:02 | 水淼
我用的vs08的怎么转移过来后直接配置文件就错了
“/myuploadweb”应用程序中的服务器错误。
怎么回事啊,能不能提供个web项目的,不是网站的。
回复 引用 查看
#51楼 2011-01-29 22:41 | 夜之悲哀
对于大文件或者网速慢时,上传过程浏览器的状态肯定会出现等待进度条,这个怎么去掉?
回复 引用 查看
#52楼 2011-08-14 23:32 | xiawei
楼主呀,现在有整理好的源码吗,能给我一份学习用吗?xiawei_hi@126.com
回复 引用 查看
#53楼 2011-09-01 17:51 | xin_0623
楼主,能传给我一份源码吗?学习一下,谢谢~394663393@qq.com
回复 引用 查看
#54楼 2011-09-19 18:39 | 飞雪连天射白鹿
我也想源码,,,最近在弄这个东西!
25445828@qq.com
回复 引用 查看
#55楼 2011-09-29 13:52 | xiaosanlun
uploadfileinfo????源码给一份
回复 引用 查看
#56楼 2011-11-11 15:30 | 木易王子
非常好的东西,楼主,
您的粗糙的工程,我下了个,配置好了,能运行,可传不上东西,
老师报错,不知道哪里配错了,能发份2010的项目源码给我吗,
yj1981223@sina.com
注册用户登录后才能发表评论,请 登录 或 注册,返回博客园首页。
首页博问闪存新闻园子招聘知识库
最新it新闻:
·android平台12月广告浏览份额51.6% 超越ios
·测试版ios源代码显示ipad 3或将支持siri
·斯蒂芬·霍金的新电脑
·京东商城2.95亿竞得北京商业地一块
·美报业巨头合作facebook谷歌 传媒重视网络网络
» 更多新闻...
最新知识库文章:
·javascript 面向对象编程
·持续集成之“everything is code”
·持续集成之“软件自我识别”
·持续集成之戏说check-in dance
·什么是闭包。
我的理解
» 更多知识库文章...
china-pub 2011秋季教材巡展
china-pub 计算机绝版图书按需印刷服务
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
Asp.Net 上传大文件专题(4)--利用ajax技术显示上传进度相关推荐
- win7计算机之间传输文件,win7电脑与电脑之间怎么传大文件_win7电脑断网时怎么相互传大文件...
我们一般传送文件,利用qq.微信.邮箱等.如果碰到断网,手头又没有U盘.那么win7纯净版的两台电脑之间如何互传大文件呢?针对怎么在电脑之间快速传送大文件的问题.爱纯净整理了以下的办法,在局域网内可以 ...
- [转]Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]
转自:http://www.cnblogs.com/stg609/archive/2008/08/03/1259206.html 接着上一篇讲 3.4 读取剩余的请求 前面我们已经提到过R ...
- Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]
接着上一篇讲 3.4 读取剩余的请求 前面我们已经提到过ReadEntityBody (Byte[] buffer, Int32 size)方法,该方法可以用来读取客户端的请求数据 ...
- PHP上传大文件视频到阿里云oss分片上传
下载阿里云oss的SDK composer require aliyuncs/oss-sdk-php 上传视频,我用的是分片上传,其实阿里云的文档已经写得很清楚了,不过这是当我把上传的功能写出来后才这 ...
- git : 上传大文件或者PDF或者二进制文件导致无法上传
参考: https://blog.csdn.net/quiet_girl/article/details/79487966 git push 时,存在大文件会报错,即使删除大文件后,还会报错.主要是因 ...
- java websocket 上传大文件,使用java websocket API和Javascript上传文件
我正在学习websocket并且已经使用websocket / json完成了聊天程序.但我坚持上传ATM的文件.任何建议&回答会很感激. 服务器端: package websocket; i ...
- 用ASP.NET上传大文件
作者:思归 微软MVP http://blog.joycode.com/saucer/ 我们在上传大文件时都遇到过这样或那样的问题.设置很大的maxRequestLength值并不能完全解 ...
- asp.net 上传大文件解决方案(转)
这次在项目中,用到了大文件上传,要上传的文件有100多m,于是研究现在国内使用的大文件上传的 组件发现用的比较多的有两个控件AspnetUpload 2.0和Lion.Web.UpLoadModule ...
- 移动端上传大文件到服务器,android上传大文件到服务器地址
android上传大文件到服务器地址 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器 ...
最新文章
- ajax传html调用样式的问题
- 如何利用报表工具FineReport实现报表列的动态展示
- 最高科技——疯狂的前缀和
- Python常用模块之time模块
- mes如果本地没有权限
- LeetCode412Fizz Buzz
- NSTimer不准确与GCDTimer详解
- 漫画:Java如何实现热更新?
- Linux每个目录的介绍
- 字符串、文件操作,英文词率统计预处理
- ipv6 华为交换机 路由配置_华为模拟器ipv6接口配置
- ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 6、总结
- 转: SVN和Git的一些用法总结
- 分量入度hdu 3836 Equivalent Sets
- 说说年度补税退税的问题
- 浅析浏览器 Web 视频播放器
- Java工程师胜任力素质模型,胜任力故事汇编C47│AspiringMinds:高潜力程序员的胜任力素质模型...
- iis服务器mp4不显示,IIS浏览器无法读取mp4视频的解决方法
- 单片机设计经验设计技巧集锦
- 记录一个pycharm的神奇bug
热门文章
- BTC回踩周线布林带中轨,与之对应的则是EMA144均线。
- RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is
- sws浏览器_快讯 | SWS入围2019英国SBID国际设计大奖
- 异形滚动轮播图---jquery实现
- 财务管理与计算机论文,计算机小论文--浅论计算机与财务管理
- U盘制作启动盘后无法使用,显示无法格式化等信息
- 双硬盘安装双系统(win10+ubuntu14.04)
- Typora+MarkDown
- MKS Robin Nano V3.0使用说明书
- 淘宝二维码对网店推广的好处