C#.NETCORE文件上传到linux服务器时要注意的问题

c#代码:
[HttpGet]
public MyResults Get()
{
var a = "D:\\www\\wwwroot\\upload\\a.jpg";
var b = "/www/wwwroot/b.jpg";
var c = Path.GetDirectoryName(a);
var d = Path.GetDirectoryName(b);
var e = Path.GetFileName(a);
var f = Path.GetFileName(b);
return MyResults.DataResult(new { c=c,d=d,e=e,f=f });
}上面的执行结果,在windows下的结果:
{"code":0,"msg":"请求成功","success":true,"data":{"c":"D:\\www\\wwwroot\\upload","d":"\\www\\wwwroot","e":"a.jpg","f":"b.jpg"},"token":null}而在 linux下执行结果是这样的:
{"code":0,"msg":"请求成功","success":true,"data":{"c":"","d":"/www/wwwroot","e":"D:\\\\www\\\\wwwroot\\\\upload\\\\a.jpg","f":"b.jpg"},"token":null}从而可以知道 , 使用反斜杠 \\ 时,在linux上使用 Path.GetDirectoryName 是获取不到值的,且使用 Path.GetFileName 获取文件名时,也不是想要的文件名,而是文件路径 。
把 c#代码改为如下:
var a = "D:/www/wwwroot/upload/a.jpg";
则在windows上的结果跟原来一样,没有改变
则linux输出结果,就正常了。
{"code":0,"msg":"请求成功","success":true,"data":{"c":"D:/www/wwwroot/upload","d":"/www/wwwroot","e":"a.jpg","f":"b.jpg"},"token":null}综上所述,最好都统一使用 / ,则不使用 反斜杠 。
















