大文件上传到服务器报错的问题

本文介绍了一种通过使用文件流(FileStream)解决大文件上传到服务器时报错的方法,并提供了具体的.NET实现代码。此方法适用于配置文件已设定最大上传限制但仍出现上传失败的情况。

最近遇见了个大文件上传到服务器报错的问题;我使用的是FileUpload控件上传的

开始用的是SaveAs()和WebClient的方法,结果本地测试可以上传,一发布的服务器就出错,配置文件也写了<httpRuntime maxRequestLength="2058000" executionTimeout="90000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192"/>但是还是不行,

郁闷了我好几天!

今天突然想到了用文件流上传FileStream

结果还真行了!

代码很简单

1.需要配置web.config里写上限制文件上传的大小就上面的那段代码;

2.在aspx.cs的文件里写:

Boolean IsReady = false;
        if (this.FileUpload1.PostedFile != null && this.FileUpload1.PostedFile.ContentLength > 0)
        {
            string path = this.Server.MapPath(@"Uploads");
            string fileName = Path.GetFileName(this.FileUpload1.PostedFile.FileName);
            int ContentLength = this.FileUpload1.PostedFile.ContentLength;
            int UploadedLength = 0;
            //uploadInfo.ContentLength = this.FileUpload1.PostedFile.ContentLength;
            //uploadInfo.FileName = fileName;
            //uploadInfo.UploadedLength = 0;

            //uploadInfo.IsReady = true;
          
            int bufferSize =1000;
            byte[] buffer = new byte[bufferSize];

            using (FileStream fs = new FileStream(Path.Combine(path, fileName), FileMode.Create))
            {
                while (UploadedLength < ContentLength)
                {
                    int bytes = this.FileUpload1.PostedFile.InputStream.Read(buffer, 0, bufferSize);
                    fs.Write(buffer, 0, bytes);
                    UploadedLength += bytes;
                }
                IsReady = true;
            }
            if(IsReady)
            {
                Response.Redirect("Default2.aspx");
            }

发布到服务器上后在本地上传大文件就没有错误了!

不过上传速度有点慢:一个400M的文件要传大概2分钟!

 

### 解决方案概述 当遇到上传包到 Linux 服务器时出现错误代码 `0000000` 的情况,可能涉及多个潜在原因。以下是针对此问题的分析以及解决方案。 #### 错误代码含义 错误代码 `0000000` 并不是一个标准的系统错误码[^4]。通常情况下,这种自定义错误可能是由应用程序或脚本返回的结果。为了进一步排查问题,建议检查日志文件以获取更详细的上下文信息。 --- ### 可能的原因及解决方法 #### 原因一:订阅管理未启用必要的存储库 如果目标 Linux 系统基于 Red Hat 或 CentOS,则需要确保已启用了所需的附加软件仓库。例如,在 RHEL 6 中,可以通过以下命令启用额外的 RPM 存储库: ```bash subscription-manager repos --enable rhel-6-server-extras-rpms subscription-manager repos --enable rhel-6-server-optional-rpms ``` 这些操作可以提供更多的依赖项支持,从而减少安装过程中可能出现的问题[^1]。 #### 原因二:权限不足 上传失败也可能是因为当前用户缺乏足够的权限来写入指定目录。在这种情况下,应验证用户的访问级别并调整相应的权限设置。例如,通过更改目标路径上的所有权或组成员资格实现: ```bash chown -R user:user /path/to/destination chmod -R u+w /path/to/destination ``` 上述命令分别用于修改所有者和增加可写属性[^5]。 #### 原因三:网络连接异常 在网络传输期间发生中断同样可能导致此类错误的发生。确认客户端与服务器之间的连通状态至关重要。利用工具如 `ping`, `traceroute` 和 `netstat` 来诊断是否有丢包现象或者端口被阻塞的情况存在。 另外,对于持续集成环境下的构建任务执行而言,采用容器化技术能够有效隔离不同作业间的干扰因素。比如 Jenkins 配合 Docker 容器运行构建流程即为此类场景提供了良好实践案例[^2]: ```groovy pipeline { agent { docker { image 'maven:3-alpine' } } stages { stage('Build') { steps { sh 'mvn clean install' } } } } ``` 以上 Groovy 脚本展示了如何配置一个简单的 Maven 构建管道,并将其置于特定版本的 Alpine Linux 上面完成整个过程。 #### 原因四:WordPress 数据库配置缺失 如果是由于 WordPress 应用程序引发的相关报错,则需特别关注其初始化阶段是否成功创建了必需的数据表结构。按照官方文档指引,可通过浏览器访问 `/wp-admin/setup-config.php` 页面手动输入数据库参数完成初步设定工作;亦或是直接编辑位于项目根目录下的 `wp-config.php` 文件内容后再继续后续步骤[^3]。 --- ### 总结 综上所述,虽然具体触发条件尚不完全明朗,但从多角度出发尝试排除法不失为一种高效手段。逐一核实上述提到的各项要素直至定位根本所在为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值