介绍
在 web 应用开发中,上传照片(或其他文件)是一项非常常见的任务。本文将介绍如何使用 C# 实现将用户上传的照片保存到服务器的物理路径,并将图片地址保存到数据库。这将会使用到 ASP.NET 和 SQL Server。
准备工作
在开始本文所述的实现之前,需要确保完成以下准备工作:
已安装 Visual Studio
已安装 SQL Server
已创建了一个数据库和一个表
在本例中,将创建一个名为 "PhotoUploader" 的数据库,并在其中创建一个名为 "Photos" 的表。表中将包含两列: "Id" 和 "ImagePath"。其中 "Id" 列是自增的 int 类型, "ImagePath" 列是 varchar 类型,用于保存图片的物理路径。
实现
1. 创建 ASP.NET 网站
打开 Visual Studio,并创建一个新的 ASP.NET 网站。名称为 "PhotoUploader",并将项目类型设置为 "Web Forms"。
接下来,右键单击项目名称,并选择 "添加" -> "新建文件夹"。将文件夹命名为 "Images",用于存储上传的图片。
2. 设计网页界面
添加一个 HTML 表单,用于上传图片。表单包含一个标题、一个文件选择框和一个提交按钮。
<h1>上传照片</h1>
<form id="form1" runat="server" enctype="multipart/form-data">
请选择要上传的照片:
<br />
<input type="file" name="fileUpload" id="fileUpload" />
<br />
<input type="submit" name="btnSubmit" value="上传" />
</form>
3. 创建后端代码
在 "CodeBehind" 文件夹下创建一个名为 "Default.aspx.cs" 的文件。在这个文件中添加代码用于处理用户上传的图片,并将图片地址保存到数据库。
4. 处理文件上传
处理文件上传需要使用 ASP.NET 的 "FileUpload" 控件。在第二步中的 HTML 代码中,已经创建了一个名为 "fileUpload" 的控件。在 Default.aspx.cs 文件中,添加以下代码用于处理文件上传:
protected void btnSubmit_Click(object sender, EventArgs e)
{
// 获取文件名
string fileName = Path.GetFileName(fileUpload.PostedFile.FileName);
// 将文件保存到服务器的物理位置
string filePath = Server.MapPath("~/Images/") + fileName;
fileUpload.PostedFile.SaveAs(filePath);
// 将文件路径保存到数据库
SaveImagePath(filePath);
}
上述代码中,首先获取用户上传的文件名。接下来,通过调用 "Server.MapPath" 方法将文件保存到服务器的物理位置。最后,将文件路径保存到数据库中。
5. 保存图片地址到数据库
为将图片地址保存到数据库中,需要使用 SQL Server。在 Default.aspx.cs 文件中,添加以下代码用于保存图片地址到数据库:
private void SaveImagePath(string imagePath)
{
string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string query = "INSERT INTO Photos (ImagePath) VALUES (@ImagePath)";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@ImagePath", imagePath);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
上述代码中,首先读取数据库连接字符串。接下来,创建一个 SQL 语句用于将图片地址插入到数据库中。然后,使用 SqlConnection 和 SqlCommand 对象执行 SQL 语句。最后,关闭数据库连接。
6. 完整代码
完成的 Default.aspx.cs 文件代码如下所示:
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
// 获取文件名
string fileName = Path.GetFileName(fileUpload.PostedFile.FileName);
// 将文件保存到服务器的物理位置
string filePath = Server.MapPath("~/Images/") + fileName;
fileUpload.PostedFile.SaveAs(filePath);
// 将文件路径保存到数据库
SaveImagePath(filePath);
}
private void SaveImagePath(string imagePath)
{
string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string query = "INSERT INTO Photos (ImagePath) VALUES (@ImagePath)";
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@ImagePath", imagePath);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
总结
本文介绍了如何使用 C# 在 ASP.NET 中实现上传照片的功能,并将图片地址保存到数据库中。这是一个非常有用的功能,在实际应用中也是经常使用的。通过学习本文,您可以掌握处理文件上传以及使用 SQL Server 插入记录的基础知识。