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

ASP.NET Core Web API部署Windows VPS后图片上传损坏问题

解决思路

1. 修复异步操作未等待的核心问题

代码里用_= image.AttImage.CopyToAsync(filestream);丢弃了异步任务,没等文件写入完成,using块就释放了FileStream,导致文件还没写入就被关闭,这是生成0字节损坏文件的直接原因。

修改代码:

using (var filestream = new FileStream(path, FileMode.Create))
{
    await image.AttImage.CopyToAsync(filestream); // 添加await等待异步写入完成
}

2. 规范路径拼接方式

当前路径拼接写法有潜在错误,改用Path.Combine多参数重载,避免手动拼接字符串引发的路径分隔符问题:

string path = Path.Combine(wwrootPath, "Pics", $"{RandomString(32)}.jpg");

3. 确认wwrootPath的正确性

确保wwrootPath是通过IWebHostEnvironment.WebRootPath正确获取的wwwroot目录路径。部署到IIS后,检查站点物理路径是否和代码预期一致,避免路径错误导致的写入异常。

4. 完善异常日志排查

当前日志仅记录异常消息和内部异常,无法定位具体错误位置,修改日志代码记录完整堆栈信息:

catch (Exception ex) 
{
    Logger.LogError(ex, "图片上传失败"); // 传入Exception对象,自动记录堆栈跟踪
    return null; 
}

5. 检查文件上传大小限制

ASP.NET Core默认限制上传文件大小为30MB,若上传文件超出限制可能导致截断。可在Program.cs中配置放宽限制:

builder.Services.Configure<FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 104857600; // 设置为100MB,按需调整
});

6. 验证上传文件的完整性

在代码中添加日志记录上传文件的原始长度,确认文件内容是否正常到达服务器:

if (image.AttImage == null)
    return null;

Logger.LogInformation($"上传文件原始长度:{image.AttImage.Length}"); // 记录文件长度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:35:17