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

ASP.NET Core上传图片时如何获取图片宽度与高度?

解决ASP.NET Core中获取上传图片宽高的编译错误

你遇到的CS1503错误是由两个细节问题导致的,我来帮你一步步修正:

错误原因分析

  1. 变量名不匹配:Action的参数定义是IFormFile mediaUpload,但你在代码里错误地使用了file来调用方法,两者名称不一致
  2. 方法调用缺少括号:OpenReadStream是一个需要执行的方法,必须通过()调用才能返回Stream对象,你直接写file.OpenReadStream只是引用了方法组,并没有实际获取到流

修正后的完整代码

[HttpPost]
public ActionResult Add(IFormFile mediaUpload)
{
    // 先校验上传文件的有效性
    if (mediaUpload != null && mediaUpload.Length > 0)
    {
        // 使用using语句自动释放Stream和Image资源,避免内存泄漏
        using (var stream = mediaUpload.OpenReadStream())
        using (var image = Image.FromStream(stream))
        {
            int width = image.Width;
            int height = image.Height;
            
            // 这里可以添加你的后续业务逻辑,比如保存图片、记录宽高到数据库等
        }
    }
    
    return RedirectToAction("Index");
}

为什么ASP.NET MVC5的代码能正常运行?

在ASP.NET MVC5中,HttpPostedFileBase.InputStream是一个属性,直接返回Stream对象,所以不需要加括号;而ASP.NET Core的IFormFile.OpenReadStream()是一个方法,必须主动调用(加括号)才能获取到流。另外你在MVC5的代码里参数名和变量名是匹配的,所以没有出现变量名错误。

额外注意事项

  • 务必使用using语句包裹Stream和Image对象,确保资源被正确释放
  • 如果你的应用需要跨平台运行(比如Linux/macOS),System.Drawing.Common在.NET Core 3.0+中默认仅支持Windows,需要在项目文件中添加以下配置才能在非Windows平台启用支持:
    <PropertyGroup>
      <RuntimeIdentifier>linux-x64</RuntimeIdentifier> <!-- 替换为对应的平台标识符 -->
      <System.Drawing.EnableUnixSupport>true</System.Drawing.EnableUnixSupport>
    </PropertyGroup>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:47