ASP.NET Core上传图片时如何获取图片宽度与高度?
解决ASP.NET Core中获取上传图片宽高的编译错误
你遇到的CS1503错误是由两个细节问题导致的,我来帮你一步步修正:
错误原因分析
- 变量名不匹配:Action的参数定义是
IFormFile mediaUpload,但你在代码里错误地使用了file来调用方法,两者名称不一致 - 方法调用缺少括号:
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
相关产品推荐
相关产品推荐

