当前位置: 首页 > news >正文

(转)用.Net的File控件上传文件的解决方案

 

在遍历了csdn中所有关于上传大文件的帖子以后,写了这篇垃圾。(:-))

上传大文件,有好几种方法:

1、思归的HttpWorkerRequest方法,太难,看不懂:-(
2、利用第三方的控件 AspNetUpload 要钱!!算了,咱还是喜欢免费的。
3、修改web.config文件,但是不能捕获错误。
4、通过ftp的方式上传。服务器需要提供ftp服务。

没辙,只好选第三种方式,谁让咱太蠢了呢!(太蠢了,没有关系,要多吃鱼,听说吃鱼能聪明点。)

那就仔细专研第三种方式吧!

修改Webcong文件:

<system.web>
            <httpRuntime maxRequestLength="40690"
            useFullyQualifiedRedirectUrl="true"
            executionTimeout="6000"
            useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8"
            minLocalRequestFreeThreads="4"
            appRequestQueueLimit="100"
            enableVersionHeader="true"
            />
            </system.web>

其中与上传有密切关系的是:

maxRequestLength

指示 ASP.NET 支持的最大文件上载大小。

该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。

指定的大小以 KB 为单位。

默认值为 4096 KB (4 MB)。

executionTimeout

指示在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。

单位为秒,在上传大的文件时把这个设的大一些。

如果服务器内存512M,已可上传大小160M的文件。(没试过,csdn上众帖子的一致意见。)

到这里web.config的设置就已经结束。

可是一旦上传文件的大小超过了这个设置的文件大小范围就会发生如下错误:

该页无法显示

您要查看的页当前不可用。网站可能遇到技术问题,或者您需要调整浏览器设置。

虽然解决不了,那也要捕获这个错误啊!怎么办呢?

最近吃了几条鱼,想了想,由于这个错误是由file控件引发的前台错误,所以在后台想利用try...catch来捕获是行不通的。

于是想到了利用.NET的错误捕获页面的机制来处理。可行哦。

1、先设置web.config
            <customErrors mode="On"/>
            2、新建一个error.aspx 文件,专门用来捕获错误的。
            3、在上传文件的aspx页面的前台页面里添加page指令。ErrorPage="UploadError.aspx"
            4、在error.aspx中添加一些代码来判断错误信息是否是file引起的前台错误。
            public class UploadError : System.Web.UI.Page
            {
            private void Page_Load(object sender, System.EventArgs e)
            {
            Exception ex = Server.GetLastError();
            if (ex != null)
            {
            Response.Redirect("../error.aspx");
            }
            else //前台错误ex为空值
            {
            Response.Redirect("uploadexcel.aspx?err=1"); //重新跳转到上传页面,
            加上err参数是为了显示错误信息
            }
            }
            5、显示错误提示。
            public class uploadexcel : System.Web.UI.Page
            {
            private void Page_Load(object sender, System.EventArgs e)
            {
            if (Request["err"] == "1")
            {
            Page.RegisterStartupScript("budget","<script language = javascript>
            alert('Upload file has failed ! File size is too large !')</script>");
            }
            }
            }
            6、搞定收工。(这鱼没有白吃啊)
            经过上述修改,现在的上传变成了,程序指定文件大小,如果超过,则弹出错误提示。
            这样一来,就好多了,最起码自己能接受了,跟用户解释也不太费劲了。

转载于:https://www.cnblogs.com/wskaihd/archive/2006/09/28/517510.html

相关文章:

  • 了解基于客户端的网页应用程序,AJAX和ASP.NET 'Atlas'[翻译]
  • [转]Spring mvc interceptor配置拦截器,没有登录跳到登录页
  • ASP站点无法访问怎么办
  • 任何一个创业者都要注意的22个经典提示
  • Oracle给Select结果集加锁,Skip Locked(跳过加锁行获得可以加锁的结果集)
  • Vue.js学习系列(三十三)-- Vue.js样式绑定(四)
  • HTTP调试之保持连接状态(微软知识库文章)
  • php将科学计算法得出的结果转换成原始数据
  • 从代码阅读看设计之简洁
  • ftp配置
  • 科技通信:无限流量上4g,已成功办理
  • tomcat 的线程池配置,字符编码设置
  • 六家共享单车加入免押计划 押金模式即将崩盘?
  • TestDriven.NET 2.0 发布了
  • Spring Boot(1) 使用Maven构建Spring Boot项目
  • ➹使用webpack配置多页面应用(MPA)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • canvas绘制圆角头像
  • js正则,这点儿就够用了
  • leetcode46 Permutation 排列组合
  • QQ浏览器x5内核的兼容性问题
  • ReactNativeweexDeviceOne对比
  • spark本地环境的搭建到运行第一个spark程序
  • Spring Cloud Feign的两种使用姿势
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vagrant 添加本地 box 安装 laravel homestead
  • 翻译:Hystrix - How To Use
  • 深入 Nginx 之配置篇
  • 使用Swoole加速Laravel(正式环境中)
  • 协程
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (007)XHTML文档之标题——h1~h6
  • (39)STM32——FLASH闪存
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (利用IDEA+Maven)定制属于自己的jar包
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)JAVA中的堆栈
  • (转)ObjectiveC 深浅拷贝学习
  • (转)ORM
  • (转)编辑寄语:因为爱心,所以美丽
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .describe() python_Python-Win32com-Excel
  • .htaccess配置常用技巧
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • :not(:first-child)和:not(:last-child)的用法
  • :如何用SQL脚本保存存储过程返回的结果集
  • []T 还是 []*T, 这是一个问题
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)