You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET调整上传图片存入数据库时报FileNotFoundException错误

问题根因

System.Drawing.Image.FromFile() 是服务端本地文件读取API,你代码中获取的 fuImage.PostedFile.FileName 是用户客户端设备上的本地文件路径,服务端磁盘不存在对应路径的文件,因此直接抛出FileNotFoundException异常。

修复方案

直接从上传文件的输入流加载图片,无需依赖客户端路径,也不需要提前把文件存到服务端磁盘。修改后的代码如下:

protected void Save(object sender, EventArgs e)
{
    if (fuImage.HasFile)
    {
        Byte[] bytes;
        string contentType = fuImage.PostedFile.ContentType;
        string fileName = Path.GetFileName(fuImage.FileName);
        // 直接从上传流读取图片,替换原有的FromFile逻辑
        using (System.Drawing.Image image = System.Drawing.Image.FromStream(fuImage.PostedFile.InputStream))
        {
            // Resize image
            using (System.Drawing.Image thumbnail = image.GetThumbnailImage(130, 170, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero))
            {
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    thumbnail.Save(memoryStream, ImageFormat.Png);
                    bytes = memoryStream.ToArray(); // 直接调用ToArray更简洁,不需要手动读
                }
            }
        }
        // Insert uploaded image to Database
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            string query = "INSERT INTO tblFiles1 VALUES (@Name, @ContentType, @Data)";
            using (SqlCommand cmd = new SqlCommand(query))
            {
                cmd.Connection = con;
                cmd.Parameters.AddWithValue("@Name", fileName);
                cmd.Parameters.AddWithValue("@ContentType", contentType);
                cmd.Parameters.AddWithValue("@Data", bytes);
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
    }
    // Display image after upload to Database
    Image1.Visible = true;
    byte[] byteData = (byte[])GetData("SELECT Data FROM tblFiles1").Rows[0]["Data"];
    string base64String = Convert.ToBase64String(byteData, 0, byteData.Length);
    Image1.ImageUrl = "data:image/png;base64," + base64String;
}

public bool ThumbnailCallback()
{
    return false;
}

额外注意事项

  • 修复后的代码给Image对象加了using释放资源,避免内存泄漏
  • 原代码中手动读取流生成字节数组的逻辑可以直接替换为MemoryStream.ToArray(),代码更简洁且不易出错
  • 如果你使用的是.NET Core/.NET 5+版本,System.Drawing.Common包仅支持Windows系统,跨平台部署需要替换为ImageSharp、SkiaSharp等跨平台图像处理库
  • 请确认承载FileUpload的form表单设置了enctype="multipart/form-data"、method="post"属性,否则可能出现上传文件为空的问题

内容的提问来源于stack exchange,提问作者notGoodAtThis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:27:03