2017-10-27 2 views
1

Ich lade Datei von vielen URLs.Android: Erstellen Sie den richtigen Dateinamen von URL

z.B .:

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 

Jetzt muss ich alle Download-Dateien speichern lokalen Ordner auf Android.

Aber was muss der Dateiname sein? Ich denke, den Dateinamen von URL zu erstellen. Aber die URL enthält verbotene Zeichen für den Dateinamen. Also ... Ich denke, Hash (SHA-1) von URL zu erstellen oder URL zu Base64 zu konvertieren. Ist das eine gute Lösung?

+0

Was ist das verbotene Zeichen in den Dateinamen '00019.jpg' und' 0001.jpg', die Sie speichern möchten? – pleft

+0

Ich aktualisiere meinen Beitrag. May hat eine andere URL mit demselben Suffix (00019.jpg) und die Datei wird ersetzt. Aber ich möchte Dateien ersetzen. – Alexei

+0

Ok, also vorher speichern, prüfen, ob die Datei mit diesem Dateinamen bereits existiert, und falls ja, fügen Sie dem Dateinamen ein Präfix oder Suffix hinzu, z. '00019-1.jpg' und dann speichern Sie es. – pleft

Antwort

0

Die Idee ist, die Datei mit dem Dateinamen als URL gleich speichern Sie es heruntergeladen wurde. Auf diese Weise wird es leicht zu finden sein (rekonstruieren Sie den Dateinamen) im Dateisystem (Cache) gegeben URL.

Also angenommen, wir haben diese URL: https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg

Ungültige Zeichen sind : und /, so dass eine einfache String.replaceAll diese Zeichen entfernen

String filename = "https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg".replaceAll(":\\/\\/|\\/", ""); 

Diese filename Variable ist gleich zu: httpsmyhostsh8n0wli4v5895jomAAB2E0WA2fetPTLjWtYe5HjAa00019.jpg

Of Natürlich, wenn Sie möchten, können Sie anstelle dieser Zeichen vollständig ersetzen B. mit einem gültigen Zeichen, z. -.

+0

Ich erstelle Hash (SHA-1) von URL. Ich brauche kein Reverse. Und es funktioniert gut – Alexei

0

Namen von Zeit zu machen:

String carTime = String.valueOf(System.currentTimeMillis()); 
String fileName=carTime.substring(carTime.length() - 4, carTime.length())+".jpg" 
+0

Nein. Weil ich viele Datei-Acync herunterladen. So kann die Zeit gleich sein. – Alexei

0

Ich denke, eine Base64 ist eine gute Lösung, wenn Sie einen umgekehrten Weg wollen.

URL => FILENAME (encode base64) 
FILENAME => URL (decode base64) 

Wenn Sie nur : ersetzen und \ durch nichts verlieren Sie Informationen und kann nicht die ursprüngliche URL aus dem Dateinamen retreive

Wenn Sie einen Hash fonction verwenden verlieren Sie Informationen zu (und Sie hinzufügen sehr sehr sehr kleine Kollisionsgefahr)

Vielleicht heute brauchen Sie nicht eine umgekehrte Lösung, aber morgen für Debug Sie nicht wissen ;-)

Be carrefull: Die Dateinamen haben Grenzlänge

EDIT:

Eine andere Lösung ist einfach Zwischen Verzeichnis erstellen (als Ersatz nur https: // von Ihrem lokalen temporären Ordner)

+0

Ich erstelle Hash (SHA-1) von URL. Ich brauche kein Reverse. Und es funktioniert gut – Alexei

Verwandte Themen