ASP.NET MVC(VS2022)图片无法显示:代码生成0B文件问题
ASP.NET MVC图片保存后大小为0B的解决办法
你的代码里有两个关键问题导致图片保存后是0B:
1. 异步复制操作未等待
CopyToAsync是异步方法,你直接调用但没加await,代码会跳过复制过程直接执行到using块末尾,此时文件流被提前释放,复制操作根本没完成,所以生成的文件是空的。
2. 路径拼接方式不规范
直接用字符串拼接路径容易出现分隔符错误,而且Path.Combine的用法不对,应该用多参数形式来拼接路径,而不是先把部分路径拼好再传进去。
修正后的代码如下:
if (image.ImageFile != null) { string result = Path.GetRandomFileName(); var r = result.Replace('.', '3'); // 正确拼接文件夹路径 string folderPath = Path.Combine(_env.ContentRootPath, "wwwroot", "images", r); Directory.CreateDirectory(folderPath); string imageName = Path.GetFileName(image.ImageFile.FileName); var filePath = Path.Combine(folderPath, imageName); using (var stream = System.IO.File.Create(filePath)) { // 等待异步复制完成 await image.ImageFile.CopyToAsync(stream); } product.FirstImageSrc = $"images/{r}/{imageName}"; }
另外注意:如果这段代码所在的方法不是异步方法,需要把方法标记为async Task或async Task<T>,比如控制器的Action方法要改成public async Task<IActionResult> YourAction(...)。
内容的提问来源于stack exchange,提问作者Bogdan
相关产品推荐
相关产品推荐

