所以我有一个文件要上传到 azure blob 存储:
C:\测试文件夹\A+B\testfile.txt
以及两个扩展方法,可帮助对我的路径进行编码,以确保为其提供有效的 azure 存储 blob 名称
public static string AsUriPath(this string filePath)
{
return System.Web.HttpUtility.UrlPathEncode(filePath.Replace('\\', '/'));
}
public static string AsFilePath(this string uriPath)
{
return System.Web.HttpUtility.UrlDecode(uriPath.Replace('/', '\\'));
}
所以当上传文件时我对其进行编码AsUriPath
并得到名字test%20folder\A+B\testfile.txt
但是当我尝试将其作为文件路径恢复时,我得到test folder\A B\testfile.txt
这显然不一样(+
已被删除)
使用 UrlEncode 和 UrlDecode 来确保获得与原始编码相同的解码信息的正确方法是什么?
如果你使用的话它会起作用WebUtility.UrlEncode
代替HttpUtility.UrlPathEncode
如果您查看有关 HttpUtility.UrlPathEncode 的文档 http://msdn.microsoft.com/en-us/library/system.web.httputility.urlpathencode%28v=vs.110%29.aspx你会看到它说:
不使用;仅用于浏览器兼容性。使用 URL 编码。
我编写了一个简单的示例,可以将其粘贴到控制台应用程序中(您需要引用 System.Web 程序集)
static void Main(string[] args)
{
string filePath = @"C:\test folder\A+B\testfile.txt";
var encoded = WebUtility.UrlEncode(filePath.Replace('\\', '/'));
var decoded = WebUtility.UrlDecode(encoded.Replace('/', '\\'));
Console.WriteLine(decoded);
}
在这里运行它.NET 小提琴 https://dotnetfiddle.net/Fg6Pv4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)