c# asp.net大文件上传(大于1G)

using System;using System.Collections;using System.Collections.Specialized;using System.Globalization;using System.IO;using System.Text;using System.Web;using System.Reflection; namespace myHttpModule{ /// /// HttpUploadModule 的摘要说明。 /// public class HttpUploadModule: IHttpModule { public HttpUploadModule() { // // TODO: 在此处添加构造函数逻辑 // } public void Init(HttpApplication application) { application.BeginRequest += new EventHandler(this.Application_BeginRequest); application.EndRequest += new EventHandler(this.Application_EndRequest); application.Error += new EventHandler(this.Application_Error); } public void Dispose() { } private void Application_BeginRequest(Object sender, EventArgs e) { HttpApplication app = sender as HttpApplication; // 如果是文件上传 if (IsUploadRequest(app.Request)) { // 返回 HTTP 请求正文已被读取的部分。 HttpWorkerRequest request = GetWorkerRequest(app.Context); Encoding encoding = app.Context.Request.ContentEncoding; int bytesRead = 0; // 已读数据大小 int read; // 当前读取的块的大小 int count = 8192; // 分块大小 byte[] buffer; // 保存所有上传的数据 byte[] tempBuff = null; if (request != null) { tempBuff = request.GetPreloadedEntityBody(); } if (tempBuff != null) { // 获取上传大小 // long length = long.Parse(request.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength)); buffer = new byte[length]; count = tempBuff.Length; // 分块大小 // 将已上传数据复制过去 // Buffer.BlockCopy(tempBuff, 0, buffer, bytesRead, count); // 开始记录已上传大小 // bytesRead = tempBuff.Length; // 循环分块读取,直到所有数据读取结束 // while (request.IsClientConnected() && !request.IsEntireEntityBodyIsPreloaded() && bytesRead < length ) { // 如果最后一块大小小于分块大小,则重新分块 // if (bytesRead + count > length) { count = (int)(length - bytesRead); tempBuff = new byte[count]; } // 分块读取 // read = request.ReadEntityBody(tempBuff, count); // 复制已读数据块 // Buffer.BlockCopy(tempBuff, 0, buffer, bytesRead, read); // 记录已上传大小 // bytesRead += read; } if ( request.IsClientConnected() && !request.IsEntireEntityBodyIsPreloaded() ) { // 传入已上传完的数据 // InjectTextParts(request, buffer); // 表示上传已结束 } } } } /// /// 结束请求后移除进度信息 /// /// /// private void Application_EndRequest(Object sender, EventArgs e) { } /// /// 如果出错了设置进度信息中状态为“Error” /// /// /// private void Application_Error(Object sender, EventArgs e) { } HttpWorkerRequest GetWorkerRequest(HttpContext context) { IServiceProvider provider = (IServiceProvider)HttpContext.Current; return (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest)); } /// /// 传入已上传完的数据 /// /// /// void InjectTextParts(HttpWorkerRequest request, byte[] textParts) { BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic; Type type = request.GetType(); while ((type != null) && (type.FullName != "System.Web.Hosting.ISAPIWorkerRequest")) { type = type.BaseType; } if (type != null) { type.GetField("_contentAvailLength", bindingFlags).SetValue(request, textParts.Length); type.GetField("_contentTotalLength", bindingFlags).SetValue(request, textParts.Length); type.GetField("_preloadedContent", bindingFlags).SetValue(request, textParts); type.GetField("_preloadedContentRead", bindingFlags).SetValue(request, true); } } /// /// 是否为附件上传 /// 判断的根据是ContentType中有无multipart/form-data /// /// /// bool IsUploadRequest(HttpRequest request) { return request.ContentType.ToLower()=="multipart/form-data"; } }}需要在web.config中加入 


<think>好的,我需要帮助用户找到关于使用C#开发资产管理系统的信息和示例代码。首先,我需要回顾用户提供的引用内容,看看是否有相关的信息可以引用。引用[1]提到C#.NET框架在固定资产管理系统中的应用,强调了高性能、安全性和跨平台能力。引用[2]介绍了一本关于个人财务管理系统开发的书籍,里面涉及C#语言基础、数据库交互等内容。引用[3]则讨论了RFID系统在资产管理中的应用,但可能相关性较低。 用户需要的是具体的开发步骤和示例代码,所以应该从系统架构设计、技术选型、数据库设计、核心功能实现等方面入手。根据引用[1]和[2],C#结合.NET Framework和Entity Framework可以用于后端开发,Windows Forms或WPF适合桌面端,而ASP.NET Core适合Web端。数据库方面,可以使用SQL Server或SQLite,如引用[2]提到的。 接下来,我需要组织这些信息,分步骤说明开发流程,并提供代码示例。例如,创建资产实体类、使用Entity Framework进行数据库操作、实现CRUD功能等。同时,要注意用户提到的系统级指令,确保数学公式正确使用,不过在这个问题中可能涉及较少。最后,生成相关问题,如性能优化、安全措施、跨平台支持等,参考引用内容中的相关点。 需要验证引用内容是否准确,例如引用[1]提到的.NET Framework的角色,引用[2]中的数据库交互部分。确保示例代码符合C#语法,并正确使用Entity Framework和Windows Forms。此外,用户可能需要了解如何集成RFID功能,但引用[3]中的内容可能不够详细,可能需要建议查阅更多资料或硬件文档。 最后,检查回答结构是否清晰,是否覆盖了用户的主要需求,并自然地添加引用标识。确保没有使用Markdown格式,使用中文,代码块正确标注语言类型,如python或csharp。</think>以下是使用C#开发资产管理系统的关键步骤和示例代码: ### 一、系统架构设计 1. **技术选型**: - 后端:C# + .NET Framework/.NET Core - 数据库:SQL Server/SQLite(引用[2]中提到的数据库交互方案) - 界面:Windows Forms/WPF 或 ASP.NET Core MVC 2. **功能模块**: ```mermaid graph TD A[资产管理系统] --> B[基础数据管理] A --> C[资产入库] A --> D[资产领用] A --> E[维保管理] A --> F[报表统计] ``` ### 二、数据库设计示例 ```sql CREATE TABLE Assets ( AssetID INT PRIMARY KEY IDENTITY, Name NVARCHAR(100) NOT NULL, Category NVARCHAR(50), PurchaseDate DATE, Price DECIMAL(18,2), Status INT DEFAULT 0 ); ``` ### 三、核心代码实现 #### 1. 资产实体类 ```csharp public class Asset { public int AssetID { get; set; } [Required] public string Name { get; set; } public string Category { get; set; } public DateTime PurchaseDate { get; set; } public decimal Price { get; set; } public AssetStatus Status { get; set; } } public enum AssetStatus { Available, InUse, Maintenance, Retired } ``` #### 2. 数据库上下文(Entity Framework) ```csharp public class AssetContext : DbContext { public DbSet<Asset> Assets { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=AssetDB;Trusted_Connection=True;"); } } ``` #### 3. 资产入库功能 ```csharp public class AssetService { public void AddAsset(Asset newAsset) { using (var context = new AssetContext()) { context.Assets.Add(newAsset); context.SaveChanges(); } } } ``` #### 4. Windows Forms界面示例 ```csharp // 资产列表界面 public partial class AssetListForm : Form { private void LoadAssets() { using (var context = new AssetContext()) { dataGridView1.DataSource = context.Assets.ToList(); } } private void btnAdd_Click(object sender, EventArgs e) { var addForm = new AddAssetForm(); if (addForm.ShowDialog() == DialogResult.OK) { LoadAssets(); // 刷新列表 } } } ``` ### 四、关键实现要点 1. **数据验证**: ```csharp public class AssetValidator : AbstractValidator<Asset> { public AssetValidator() { RuleFor(x => x.Name).NotEmpty().WithMessage("资产名称必填"); RuleFor(x => x.Price).GreaterThan(0).WithMessage("价格必须大于0"); } } ``` 2. **报表生成**(引用[2]中的报表需求): ```csharp public void GenerateInventoryReport() { using (var context = new AssetContext()) { var reportData = context.Assets .GroupBy(a => a.Category) .Select(g => new { 分类 = g.Key, 数量 = g.Count(), 总价值 = g.Sum(a => a.Price) }).ToList(); // 使用ExcelLibrary或第三方组件生成报表 } } ``` 3. **RFID集成**(引用[3]中的资产管理场景): ```csharp public class RFIDReader { public string ReadTag() { // 调用RFID设备SDK return RFIDDriver.GetCurrentTag(); } } ``` ### 五、部署与优化 1. 使用ClickOnce进行Windows应用部署 2. 数据库索引优化: ```sql CREATE INDEX IX_Asset_Category ON Assets(Category) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值