Dotnet 5 Web API本地运行正常 生产环境上传视频报文件找不到异常
问题根因
报错中出现的/Users/thiagodias/Desktop/是macOS系统专属的本地路径,你当前的部署环境为Ubuntu+Docker,不存在该目录结构,即便你手动保持路径命名一致,Docker容器默认也无法访问宿主机器本地桌面的文件,因此触发文件找不到异常。
解决思路
- 修正文件存储逻辑
不要硬编码本地开发环境的绝对路径,也不要直接使用前端传递的文件路径。收到上传请求后,先将文件流写入部署环境专属的可访问目录(可通过配置项动态指定上传根目录,比如Docker容器内的/app/uploads路径),拿到服务端实际存储的有效路径后,再传递给Vimeo上传接口。 - 调整Docker挂载配置
如果视频文件存储在宿主Ubuntu机器上,运行容器时需添加目录挂载参数,将宿主的上传目录映射到容器内对应路径,示例:docker run -v /home/ubuntu/uploads:/app/uploads 你的镜像名,同时要给容器运行用户开通该目录的读写权限。 - 补充Nginx配置
你当前的Nginx配置缺少大文件上传支持,默认上传上限仅1M,会拦截视频上传请求,需要在server块中添加配置:
如果需要通过Nginx直接访问上传的视频文件,还要补充对应的静态资源location规则。client_max_body_size 2G; # 可根据你的最大视频大小调整阈值 - 修正代码逻辑
检查UserService.cs中VimeoUpload方法的入参来源,确认生产环境不会带入本地开发时的硬编码测试路径。建议添加上传路径日志,上线前先打印调用Vimeo接口时传入的文件路径,确认和部署环境的目录结构匹配。 - 权限校验
确认.NET程序运行身份对上传存储目录有可读权限,调用FileInfo.Length时无读取权限也可能触发文件不存在的异常。
内容的提问来源于stack exchange,提问作者Thiago Santos
相关产品推荐
相关产品推荐

