最新评论

共3页: 1 2 3 下一页 
studentsky@163.com 大哥发个谢谢了!
楼主辛苦了 ,给我一份吧 yang.mymailbox@gmail.com
wgchao_yt@163.com 谢谢~~
大概意思理解,不过代码不会写,坐等源码下载。
int index = Array.IndexOf(this.m_FileConId, fileControlId.ToLower()); 怎么一直提示这句值不能为空!
mengxj@yeah.net 也来晚了,谢谢了哈
博主你好, 十分佩服您的这个解决方案。 不过在使用您的.Net2.0源码中有一些问题,请博主查看一下。 问题如下:使用的.Net2.0源码,在.Net4.0工程中引用的,有稍许修改,封装为ascx控件。 上传中出错,通过跟踪,发现博主源码中引用控件的后台页代码中存在错误,源码如下: protected void Button1_Click(object sender, EventArgs e) { UploadContext context = UploadContextFactory.GetUploadContext(); if ((context != null) && (context.Status == uploadStatus.Complete)) { context.SaveFile(file1.ClientID, Request.MapPath("/myupload/")); } } 这里出错的原因是使用了file1.ClientID,在.Net4.0中应该使用file1.Name.不知是不是与.Net2.0的差异所致。具体跟踪细节如下》 》在UploadContext.cs中的SaveFile()函数中,第一行: 》int index = Array.IndexOf(this.m_FileConId, fileControlId.ToLower 》()); 》对比this.m_FileConId的值和fileControldId的值可以发现,出现了引用错误 》根据名称,博主的原意应该是使用客户端控件的ID。然而在DataReader.cs-- 》GetFileInfo()函数中,从buffer内提取的Content_Disposition中的 》lfileInfo.FileControl获取的是客户端控件的name,而不是ID。其值为“ctl00$MainContetn$uploadFile$file1” 》客户端的源代码如下:<input name="ctl00$MainContetn$uploadFile$file1" type="file" id="ctl00_MainContent_uploadFile_File1" /> 从这里和lfileInfo.FileControl的值可以看出,在服务器端从buffer中提取的FileControl是客户端空间的Name,而不是ID。 所以m_FileConId的值实际上是客户端控件的Name,所以在int index = Array.IndexOf(this.m_FileConId, fileControlId.ToLower());中就必然出现错误。 解决方法,就是在page后台cs页中的file1.ClinetId换成file1.Name. 如果原方案能够编译成功,是因为上传控件<input>的id和name恰巧都命名为相同的“file1”了,并且在后台没有使用分级命名(因为源码中的控件在根页)。后台分级命名规则:id使用“_”串联,Name使用"$"串联。
lifuyun023@163.com 是否来晚了?麻烦传给我一下。谢谢!
Re:Asp.NET大文件上传开发总结(一) 别爱上哥,哥只是个传说! 2010-05-02 23:16  
[quote]Charrote:真不知你在写什么![/quote] 是因为你水平太菜了!根不知道的东西太多了
Re:Asp.NET大文件上传开发总结(一) 别爱上哥,哥只是个传说! 2010-05-02 23:15  
留爪!
上传着,显示无法显示该页,如果调 式的话,可以成功!
楼主是四川的,,,,???
tdskee@126.com 不知能否发一份呢?
pop520boy@163.com 是否来晚了?麻烦传给我一下。谢谢!
出现这个错误怎么解决呢? “/”应用程序中的服务器错误。 -------------------------------------------------------------------------------- 未能找到路径中的某个部分。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.DirectoryNotFoundException: 未能找到路径中的某个部分。 源错误: 行 325: newPath += GetFileName(this.m_FileNames[index]); 行 326: } 行 327: File.Move(this.TmepFileDir + fileName, newPath); 行 328: return true; 行 329: }
为什么临时文件都不会自动删除呢
yangq8802@163.com 谢谢了!!! 记得上附件!
忘记附上邮箱 yuer3325@gmail.com
谢谢,也给我一份,急需。
博主真伟大,总的来说还是相当不错的 要好好学习学习
需要一份 morutx@sina.com
现在应该没BUG了吧
好 顶起 下载来看看
给我传一份,谢谢了 mars168@126.com
给俺也传一份吧。非常感谢谢谢。
15楼的问题正是我想问的.一般人是想解决如何上传大文件,
而我是想如何理想地限制用户上传大文件.

如果用Request.Files的尺寸来判断肯定不是好办法.首先这种办法是文件已全部上传后才能判断,其次如果文件大小超过系统设定,会出现"此页无法找到"不友好提示.
参考了一下楼主及网上的资料,似乎应该通过HttpWorkerRequest.GetTotalEntityBodyLength来提前判断准备上传文件的大小.
现在最关键的是,知道大小后,如何不让文件上传或提前中止上传,并给出一个友好的提示(或跳转到一个指定页面),现在一直没能解决。
如果用httpWorkerRequest.CloseConnection()将会中断连接,用户也会收到一个非常不友好的提示。
如果用页面跳转,好象不是很成功(好象必须上文件上传结束才能执行跳转,有时根本就无法跳转)
头痛

测试发现,在上传中途退出上传,并不能自动删除临时文件"上传上下文"内
public virtual void Dispose(bool disposing)
方法内写的有错误,m_FileNames保存的是客户端文件路径并不是服务端文件路径,所以文件永远都删除不了.
能发我一份吗?
maliangnet@126.com
re: Asp.NET大文件上传开发总结(一) Charrote 2009-04-21 14:32  
真不知你在写什么!
谢谢,需要一份源代码。
@tester111
Begin_Request事件里,不知在Respon.End()后用Respon.Flash()可不可以,不过,我认为可以在进度界面,提示用户文件过大,然后用脚本取消IE提交文件(我初步想可以用后退的办法取消提交)
楼主,您好!
请问一下:
如果我对上传的文件大小有限制,比如说最大允许上传1GB的大文件。那么该如何在读取完整个文件的内容之前,先进行判断?如果超过1GB,则不读取该文件的内容,并且在页面上输入文件太大的提示信息。这样可以避免他人上传10GB的超大文件呵!

在IHttpModule的Begin_Request事件方法里,可以通过
httpApplication.Request.ContentLenght 来获得客户端请求的正文长度,如果设定ContentLength > 1024 * 1024 * 1024 时就终止页面的执行(即不读取该文件的内容),并向客户端输出文件太大的信息,该如何做呢?

我执行了httpApplication.Response.End(); 但不行,文件仍在读取上传。

用Reflector查看Respon.End()方法如下:
----------------------------------------------
public void End()
{
if (this._context.IsInCancellablePeriod)
{
InternalSecurityPermissions.ControlThread.Assert();
Thread.CurrentThread.Abort(new HttpApplication.CancelModuleException(false));
}
else if (!this._flushing)
{
this.Flush();
this._ended = true;
if (this._context.ApplicationInstance != null)
{
this._context.ApplicationInstance.CompleteRequest();
}
}
}

------------------------------
似乎在Begin_Request里,this._context.IsInCancellablePeriod == false。

这样好像要执行CompleteRequest()方法。

=========================================

如果我执行httpWorkerRequest.CloseConnection(); 则可以终止页面的上传,但因为是关闭了客户端的连接,这样就无法向客户端输出文件太大的提示信息了,IE会显示无法显示该页,这样的用户体验又很不好!


请问有没有办法,在Begin_Request事件里,向客户端输出信息同时又终止程序的执行呢?





有源代码吗. 我最近要在一个项目上用到了. 望楼主发一份了
谢谢了
写得真不错!

弱弱地问一下: 楼主,您这个组件可以一次性上传多个附件吗? 也就是说在一个Form里,有多个UploadFile控件时,可以支持吗?
!!!我也急需一份~谢谢,ioas2008@gmail.com
我也急需一份~谢谢,845lb@163.com
谢谢 .net2.0源码找不到
找不到.net2.0源码!!!!!望楼主发1份  谢谢
我也有需要,谢谢给我一份。devilzone@163.com
我急需哦 xiaosongol@139.com
非常感谢您,我需要。
bingw001@sina.com.cn
怎么验证一下上传的类型,好像验证起来很麻烦
我在使用时,有时能正常上传,有时会出现“无法找到该页”,查看服务器的应用程序日志,发现有警告信息,asp.net 2.0 post请求超出范围,到临时文件夹下看文件大约传到20M左右就会出现此情况,不知什么,请高人指点!
我的服务配置是win2003+iis6.0
首先赞叹随喜师兄,把这么好的文章供养给大家,真是功德无量,末学有一个疑问,希望能得到师兄的解答?
在UploadContext.cs中

internal UploadContext(System.Web.UI.Page page, string TempFileDir)
{
m_TempFileDir = TempFileDir;
if (m_TempFileDir.Trim()[m_TempFileDir.Trim().Length - 1] != '\\')
{
m_TempFileDir = m_TempFileDir.Trim() + "\\";
}
m_GUID = Guid.NewGuid().ToString();

page.ClientScript.RegisterHiddenField("UploadID", m_GUID);
page.Response.Expires = 1;
m_status = uploadStatus.Initializing;
}
不知道你这段代码中的page.Response.Expires = 1;设置缓存为1分钟有什么用途?
如果设置缓存为一分钟,那么在一分钟之内的不同用户都在上传文件,岂不是都是相同的GUID?
Email回复上写了,多谢主人咯~
gigilovestom@163.com
非常赞叹师兄,功德无量,向你看齐。
re: 一次死锁情况分析过程 amingo 2008-11-03 15:21  
--引用--------------------------------------------------
Cheney Shue: 你用的什么数据库啊,居然还会发生死锁的情况,碰到死锁的概率应该几乎为0
--------------------------------------------------------

菜鸟
共3页: 1 2 3 下一页 

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:巴山
园龄:4年5个月
粉丝:4
关注:0

搜索

 
 

常用链接

我的标签

随笔档案

网络收集的有价值的链接

最新评论

阅读排行榜

评论排行榜

推荐排行榜