如何将url转换为文件名?

时间:2014-09-01 09:47:04

标签: c# .net url converter filenames

我想将aribtrary网址(包括路径和查询部分)转换为有效的文件名。我选择使用Base64,如下所示。

是否有更好的Base64代码,例如避免Byte[]? url到文件名的最佳做法是什么?我想有一个超出文件名长度限制的问题。

string encoded = 
   System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(url));
string decoded = 
   System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(encoded));

if (decoded != url)
    throw(new SomeException());

2 个答案:

答案 0 :(得分:2)

我想说最好的做法是,如果可能,文件名不应与URL直接相关。除非您控制将使用此方法调用的URL,否则您将面临安全隐患。最好是你可以生成一些本地ID,将其用作文件名,然后将该ID链接到URL。这样,您始终可以完全控制正在编写的文件名,而使用URL可以让您了解潜在的攻击者。

答案 1 :(得分:1)

如果/当您需要将名称翻译回原始Url时,您可能需要创建单独的映射表。生成一个唯一的文件名,并将其存储在表中,并在其旁边显示原始URL。您可以使用API​​(Guid,Random,DateTime)或简单的计数器来获取唯一的文件名。

这种方式不必担心重复和非法字符,因为您可以控制文件名生成。

当您缓存JSON请求/响应时,请小心使用POST:两个请求的URL可能相同,但内容可能不同,因此您可能不希望在下一个请求中使用第一个缓存。 / p>

一般情况下,您不会缓存POST,但有些REST API使用POST来绕过最大的Url GET请求长度。