我从许多网址下载文件。
e.g:
https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg
https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/0001.jpg
https://myhost2222/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg
https://myhost2222/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/0001.jpg
现在我需要将所有下载文件保存到Android本地文件夹。
但文件名必须是什么? 我想从URL创建文件名。 但URL包含文件名的禁用字符。所以...我想从url创建哈希(SHA-1)或者将URL转换为Base64。 这是一个很好的解决方案吗?
答案 0 :(得分:0)
从时间起制作名字:
String carTime = String.valueOf(System.currentTimeMillis());
String fileName=carTime.substring(carTime.length() - 4, carTime.length())+".jpg"
答案 1 :(得分:0)
我们的想法是使用与从中下载的URL
相同的文件名保存文件。这样,在给定URL
的文件系统(缓存)中很容易找到它(重建文件名)。
假设我们有URL
:https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg
无效字符为:
和/
,因此简单的String.replaceAll
会删除这些字符
String filename = "https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg".replaceAll(":\\/\\/|\\/", "");
此filename
变量等于:httpsmyhostsh8n0wli4v5895jomAAB2E0WA2fetPTLjWtYe5HjAa00019.jpg
当然,如果您希望自己可以而不是完全删除这些字符,则可以使用有效字符替换它们,例如-
。
答案 2 :(得分:0)
我认为如果你想要一个反向的方式,base64是一个很好的解决方案。
URL => FILENAME (encode base64)
FILENAME => URL (decode base64)
如果您只是将:
和\
替换为空,则会丢失信息并且无法删除
从FILENAME
如果你使用哈希功能,那么你也会丢失信息(并且你会增加非常小的碰撞风险)
也许今天你不需要一个反向的解决方案,但明天的调试你不知道; - )
be carrefull:文件名有限制长度
编辑:
另一种解决方案是简单地创建中间目录(仅用本地临时文件夹替换https://)