ASP.NET 文件上传与数据库存储

在现代Web开发中,文件上传功能是常见的需求之一。本文将介绍如何使用ASP.NET和SQL Server实现文件上传功能,并将文件存储到数据库中。将创建一个简单的示例,包括前端表单设计、数据库表的创建、存储过程的编写,以及后端代码的实现。

创建数据库表

首先,需要在SQL Server数据库中创建一个表来存储文件信息。这个表名为File,包含以下列:

CREATE TABLE [dbo].[File]( [FileId] [int] IDENTITY(1,1) NOT NULL, [Filename] [varchar](100) NULL, [Extension] [varchar](8) NULL, [ContentType] [varchar](50) NULL, [Document] [varbinary](50) NULL, CONSTRAINT [PK_File] PRIMARY KEY CLUSTERED ( [FileId] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

这个表使用FileId作为主键,其他列分别存储文件名、扩展名、内容类型和文件内容(二进制格式)。

创建存储过程

为了将文件保存到数据库中,需要创建一个存储过程。这个存储过程名为spFile_Add,它接受文件名、扩展名、内容类型和文件内容作为参数,并将这些信息插入到File表中。

CREATE PROCEDURE spFile_Add @Filename varchar(100), @Extension varchar(8), @ContentType varchar(50), @Document varbinary(50) AS BEGIN INSERT INTO [File](Filename, Extension, ContentType, Document) VALUES (@Filename, @Extension, @ContentType, @Document) SELECT SCOPE_IDENTITY() END

存储过程使用SCOPE_IDENTITY()函数返回新插入行的FileId。

前端表单设计

接下来,需要创建一个ASP.NET表单,允许用户选择文件并提交。这个表单包含一个文件输入控件和一个按钮。

<form id="frmMain" runat="server"> <div> <input type="file" id="txtFile" title="Browse for file which you want to save" Runat="server" /> <input id="btnSave" type="button" value="Save" onclick="document.frmMain.submit()" /> </div> </form>

用户可以通过文件输入控件选择要上传的文件,然后点击“Save”按钮提交表单。

后端代码实现

ASP.NET的后端代码中,需要处理文件上传请求,并将文件信息保存到数据库中。以下是处理文件上传的代码示例:

using Microsoft.Practices.EnterpriseLibrary.Data; using Microsoft.Practices.EnterpriseLibrary.Data.Sql; using System.IO; using System.Configuration; using System.Data; using System.Data.SqlClient; protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack) { if (txtFile.PostedFile != null && txtFile.PostedFile.ContentLength > 0) { string filename = Path.GetFileName(txtFile.PostedFile.FileName); string extension = Path.GetExtension(filename); string contentType = txtFile.PostedFile.ContentType; byte[] document = new byte[txtFile.PostedFile.ContentLength]; int fileId = AddFile(filename, extension, contentType, document); } } } protected int AddFile(string filename, string extension, string contentType, byte[] document) { SqlDatabase sqlDatabase = new SqlDatabase(ConfigurationManager.ConnectionStrings["dbConnString"].ConnectionString); string sql = "spFile_Add"; SqlCommand sqlCommand = sqlDatabase.GetStoredProcCommand(sql) as SqlCommand; Object obj = null; try { sqlDatabase.AddInParameter(sqlCommand, "@Filename", SqlDbType.VarChar, filename); sqlDatabase.AddInParameter(sqlCommand, "@Extension", SqlDbType.VarChar, extension); sqlDatabase.AddInParameter(sqlCommand, "@ContentType", SqlDbType.VarChar, contentType); sqlDatabase.AddInParameter(sqlCommand, "@Document", SqlDbType.VarBinary, document); obj = sqlDatabase.ExecuteScalar(sqlCommand); if (obj != null) return int.Parse(obj.ToString()); else return 0; } catch (Exception err) { throw new ApplicationException(err.Message); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485