如何将url转换为文件名

本文关键字:文件名 转换 url | 更新日期: 2023-09-27 18:20:15

我想将aribtrary url(包括路径和查询部分)转换为有效的文件名。我选择使用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());

如何将url转换为文件名

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

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

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

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

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