C#上传图片到指定文件夹

本文介绍了一个使用C#实现的简单图片上传功能,通过创建一个名为UpPic的文件夹,将图片保存在文件系统中,而数据库中只存储图片文件名。在前端,用户选择图片后提交,后端代码会检查图片类型和大小,然后将其保存到UpPic文件夹,并调用webserver中的方法进行处理。这种方法虽然简单,但可能占用较多服务器空间且数据安全性较低。

最近写了一段代码实现图片上传功能,设计Access数据库的时候原先把记录图片的字段类型选为OLE对象,可是实现了上传后却取不到图片显示(SQL2000数据库时可以实现,理论上用Access数据库也是差不多,但Access数据库却显不了图片),到现在也没去详查什么原因,最后为了尽早解决这个功能,改用了比较简单的方法。

该方法就是在Project里建一个名为UpPic的文件夹,把记录图片的字段类型改为文本类型,该字段只是记录上传图片的名称,而图片实质上是保存在UpPic文件夹里。

前台CODE:

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <div>

            <input id="picFile" name="picFile" type="file" style="WIDTH: 488px; HEIGHT: 22px" runat="server">

        </div>

        <div>

            <asp:button id="Button1" runat="server" Text="提 交"  Width="75px"

                onclick="Button1_Click"></asp:button>

        </div>

    </div>

    </form>

</body>

</html>

 

后台CODE(Button1_Click方法):

protected void Button1_Click(object sender, EventArgs e)

    {

        string image = picFile.Value;

        string imagecontent = "";

        string exname = image.Substring(image.LastIndexOf(".") + 1).ToUpper();               //截取图片的后缀名并转为大写

        if (exname == "JPG" || exname == "JPEG" || exname == "GIF" || exname == "PNG" || exname == "BMP")

        {

            if (picFile.PostedFile.ContentLength > 524288)

            {

                Response.Write("<script>alert('上传的图片大于 0.5M, 请处理图片后再上传! ')</script>");

                return;

            }

            //用时间作为图片名

            string filetime = DateTime.Now.ToString("yyyyMMddhhmmssfff");                    //取得当前时间

            string filename = picFile.PostedFile.FileName;                                    //取得图片名

            imagecontent = filetime + filename.Substring(filename.LastIndexOf("."));            //时间名加上图片后缀名

 

            string strpath = Server.MapPath("") + "//UpPic//" + imagecontent;              //取得将要保存图片的路径

            picFile.PostedFile.SaveAs(strpath);                                               //把图片保存在此路径中

        }

        else

        {

            Response.Write("<script>alert('上传的不是图片类型! ')</script>");

            return;

        }

 

        int i = 0;

        i = g2.AddProInfo(imagecontent);    //调用webserver中的方法

        if (i == 0)

        {

            Response.Write("<script>alert(' 添 加 失 败! ');window.location.href='AddProInfo.aspx'</script>");

        }

        else

        {

            Response.Write("<script>alert(' 添 加 成 功 !'); </script>");

        }

    }

实现的过程很简单,代码也很少!要显示图片的话直接从文件夹路径里取就可以,但此方法的缺点是占用比较大的服务器空间.而且数据的安全和完整性也不好.最好使用的方法还是把图片文件转换成文件流的方式保存到数据库!

<think>我们正在使用C#中的OpenFileDialog控件来选择文件,然后将其保存(复制)到指定目录。 步骤: 1. 创建OpenFileDialog实例,并设置其属性(如初始目录、过滤器等)。 2. 显示对话框,让用户选择文件。 3. 如果用户选择了文件(即点击了“打开”),则获取所选文件的路径。 4. 指定目标目录(即要保存到的目录)。 5. 将选中的文件复制到目标目录中。注意:如果目标目录不存在,需要先创建;如果目标目录已存在同名文件,则需要处理(例如覆盖或重命名)。 注意:我们不是移动文件,而是复制文件。因此使用File.Copy方法。 根据引用[1]、[3]、[4]和[5],我们可以设置OpenFileDialog的属性,如InitialDirectory、Filter等。同时,引用[5]中给出了文件操作的方法,我们可以借鉴。 代码示例: 假设我们有一个按钮点击事件,当点击按钮时,打开文件对话框,选择文件后,将文件复制到指定目录(例如:C:\TargetDirectory)。 注意:需要添加必要的命名空间(如System.IO)。 下面是一个简单的实现:</think>### 使用 OpenFileDialog 选择文件并保存到指定目录 在 C# 中,通过 `OpenFileDialog` 选择文件并保存到指定目录的完整步骤如下: #### 1. **添加必要命名空间** ```csharp using System.IO; using System.Windows.Forms; // WinForms 应用 ``` #### 2. **核心代码实现** ```csharp private void btnSelectAndSave_Click(object sender, EventArgs e) { // 创建文件选择对话框 using (OpenFileDialog openFileDialog = new OpenFileDialog()) { // 设置对话框属性 [^1][^3][^4] openFileDialog.Title = "选择要保存的文件"; openFileDialog.InitialDirectory = @"C:\"; // 默认路径 openFileDialog.Filter = "所有文件(*.*)|*.*|文本文件(*.txt)|*.txt"; openFileDialog.FilterIndex = 1; openFileDialog.RestoreDirectory = true; // 显示对话框并确认选择 if (openFileDialog.ShowDialog() == DialogResult.OK) { try { string sourcePath = openFileDialog.FileName; // 获取源文件路径 string targetDirectory = @"D:\Uploads\"; // 指定目标目录 // 创建目标目录(如果不存在)[^5] Directory.CreateDirectory(targetDirectory); string targetPath = Path.Combine(targetDirectory, Path.GetFileName(sourcePath)); // 复制文件到目标目录(覆盖已存在文件) File.Copy(sourcePath, targetPath, true); MessageBox.Show($"文件保存成功!\n路径: {targetPath}"); } catch (Exception ex) { MessageBox.Show($"保存失败: {ex.Message}"); } } } } ``` #### 关键参数说明 1. **InitialDirectory** 设置初始路径(使用双反斜杠 `\\` 转义)[^1][^4] ```csharp openFileDialog.InitialDirectory = @"D:\User\Documents\"; ``` 2. **Filter** 定义可选择的文件类型[^2][^3] ```csharp // 格式: "描述|扩展名" openFileDialog.Filter = "图像文件|*.jpg;*.png|PDF文件|*.pdf"; ``` 3. **文件操作** - `File.Copy(源路径, 目标路径, true)`:第三个参数允许覆盖 - `Directory.CreateDirectory()`:自动创建缺失目录 #### 3. **高级用法** - **多文件选择** ```csharp openFileDialog.Multiselect = true; // 启用多选[^3] foreach (string file in openFileDialog.FileNames) { // 批量处理文件 } ``` - **自定义文件名** ```csharp // 在目标路径中修改文件string newFileName = $"backup_{DateTime.Now:yyyyMMdd}{Path.GetExtension(sourcePath)}"; string targetPath = Path.Combine(targetDirectory, newFileName); ``` #### 注意事项 1. 需要处理文件访问权限异常 2. 大文件复制建议使用 `FileStream` 分块读写[^5] 3. 目标路径需使用 `Path.Combine()` 避免路径拼接错误 > 示例效果:用户选择文件 → 自动复制到 `D:\Uploads\` → 显示成功提示。实际路径需根据需求修改。 --- ### 相关问题 1. 如何限制 `OpenFileDialog` 只能选择特定类型的文件? 2. 如何在复制文件时显示进度条? 3. 如何实现覆盖前确认机制? 4. 怎样处理网络路径文件的复制? [^1]: C# OpenFileDialog打开文件对话框(详解) [^2]: wimform c#保存文件,选择文件,读取文件内容 [^3]: Winform中使用OpenFileDialog选择文件打开并获取文件路径 [^4]: 设置C#OpenFileDialog的指定路径、文件格式等属性 [^5]: C#文件创建和读取&OpenFIleDialog&SaveFileDialog用法
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值