一、场景
现在公司有个需求,要在后台自定义报告内容:封面、内页、目录等;很明显,一定要用到文件上传的功能,Bug出现的问题是这样子的:
· 1、本地正常运行,上传无误
· 2、测试服务器运行正常,上传无误
· 3、正式服就不行了,Error:Could not find a part of the path …
很懵逼,因为本地和测试服运行都OK啊,根本无法定位,最难搞的是,正式服有毛病,只能通过正式服发布后再能验证是否对吧,然而团队协作开发永远不是一个人在进行,没办法,每次更新通过Git上传到正式服,每次最少也得20来分钟,就这样将时光虚耗在漫长的等待中…
二、Bug重现
无奈啊,已经停滞了一天啊,笔者已经厌烦了这样的等待,没有思考空间我们就应该创造思考空间,不能思考的时光,无异于慢性自杀;于是,尝试了两种方案:
· 1、不给文件夹授权读写的操作
· 2、让上传文件的文件夹不存在(直接删除:开发环境不影响)
· 呼!深吸一口气,Bug总算在重现!
三、解决方案
找到了问题的根结所在,就有发挥的空间了!
· 1、直接才该路径下创建该文件夹即可,并授权读写操作
· 2、做一下判断,若该路径不存在,创建一下就OK了
[HttpPost]
public async Task Upload()
{
//处理上传的文件
var file = Request.Form.Files.FirstOrDefault();
if (file != null)
{
var type = file.FileName.Substring(file.FileName.IndexOf('.'));
var date = DateTime.Now.ToString("yyyyMMddHHmmssfffff");
//拼接文件存储路径
string filePath = @"/file/report";
string path = _env.WebRootPath + filePath;
//上传后文件名
string fileName = date + type;
//路劲不存在、则创建
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
using (FileStream stream = new FileStream(Path.Combine(path, fileName), FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
}
再次推上服务器,问题总算解决!