Konvertierung von kurzen Upload-URLs in vollständige URLs

Ich bin mir nicht sicher, ob ich hier am falschen Baum bellen, also entschuldigt bitte, falls das so ist – aber jegliche Hinweise sind sehr willkommen!

In unserem Discourse-Forum gibt es einige Threads, die teilweise auf unserer Hauptwebsite angezeigt werden. Da die „gekochte

Zuerst Base62-Decodierung mit dem invertierten Zeichensatz, dann Hex-Encodierung des Ergebnisses.

In Python-Code sieht das so aus:

rebase = hex(base62.decode(base, base62.CHARSET_INVERTED))[2:].zfill(40)

Vielen Dank für die schnelle Antwort @michaeld. Ich werde es heute später versuchen :slight_smile:


Für alle, die daran interessiert sind und dies in PHP umsetzen: Ich habe eine Composer-Bibliothek namens base62 by tuupola verwendet.

Hier ist der Code, den ich benutzt habe:

<?php

$base62 = new Tuupola\Base62(["characters" => Tuupola\Base62::INVERTED]);

/** Setze den ursprünglichen Dateinamen, ohne Dateierweiterungen */
$s = "r3AYqESanERjladb4vBB7VsMBm6";

/** Dekodieren, in Hex umwandeln */
$decoded = $base62->decode($s);

/** Erwartetes Ergebnis: bda2c513e1da04f7b4e99230851ea2aafeb8cc4e */
echo bin2hex($decoded);

Interessant. Ich kann dies mit Javascript nicht reproduzieren. Da Ihre letzte Methode eine bin2hex-Konvertierung ist, ist das Ergebnis der Base62-Dekodierung meines Verständnisses nach keine binäre Darstellung.

Aus JS-Sicht fand ich Folgendes hilfreich:
https://www.npmjs.com/package/aybabtu

function fromBase62(s) {
  var digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var result = 0;
  for (var i = 0; i < s.length; i++) {
    var p = digits.indexOf(s[i]);
    if (p < 0) {
      return NaN;
    }
    result += p * Math.pow(digits.length, s.length - i - 1);
  }
  return result;
}

Leider helfen weder die bin2hex- noch die dec2hex-Methoden, wenn ich Ihre Eingabezeichenfolgen verwende.

Ich habe für dieses Problem einen Codesandbox erstellt, falls jemand daran interessiert ist, damit herumzuspielen. Der endgültige Wert ist 1 für meine Eingabezeichenfolge, was falsch ist ; (

Danke

Sie sollten binVal.toString(16) verwenden können, um den Hexadezimalwert zu erhalten.
Ich glaube jedoch (!), dass das Zwischenergebnis zu groß ist, um in eine normale Ganzzahl zu passen.

Danke für den Hinweis, Richard, aber ich komme auch mit dieser Idee nicht weiter.

Ich weiß nicht, wäre es nicht eine gute Funktion, eine Einstellung wie „Absolute Upload-Links in Rohansichten (Routen) aktivieren“ zu haben? Ich würde das in unserem Fall auf jeden Fall nutzen – denn meines Verständnisses nach ist die Verkürzung von Upload-URLs wirklich nur eine Discourse-Optimierung, um Code zu reduzieren, oder? Sie hat nichts mit Markdown zu tun.

Kann jemand aus dem Discourse-Team eine JS-Methode bereitstellen, die die absolute URL wiederherstellen kann?
Das wäre hilfreich für die Community, denkt nach.

Ich schaffe das nicht ;(

@RGJ kennst du jemanden im Discourse-Team, der diese Hilfsfunktion bereitstellen kann?

Nein…
Ich würde vorschlagen, dass du das in Marketplace postest.

Sie könnten mehr über Ihren Anwendungsfall sagen. Vielleicht ist dies nicht die beste Lösung.

Sie können von Base62 in Hex umwandeln, aber Sie werden die Upload-URL niemals vollständig rekonstruieren können, ohne eine Art Schnittstelle zur Discourse-Datenbank. Der vollständige Pfad zu einem Upload hängt von der id des Uploads ab, die nicht aus der Kurz-URL ermittelt werden kann.\n\nWie @pfaffman sagte, könnten wir Ihnen vielleicht besser helfen, wenn Sie Ihren Anwendungsfall beschreiben.