Wie bekomme ich MIME-TYPE von Base 64 String?

Lesezeit: 4 Minuten

Benutzeravatar von Hikmet Tüysüz
Hikmet Tüysüz

Ich erhalte base64 für Zeichenfolgen vom Backend und dekodiere sie dann in Javascript, um sie im Browser anzuzeigen.

Diese Zeichenfolge kann eine beliebige Datei sein .pdf, .img, .docx, .zip usw.

Meine base64-Zeichenfolge enthält nicht den MIME-Typ, zum Beispiel den Teil „data:application/pdf;base64“. Also muss ich den Mime-Typ von base64 bekommen.

Gibt es eine Möglichkeit, diese Lösung mit Javascript oder Jquery zu lösen?

  • Eine base64-codierte Zeichenfolge kann alles enthalten, und Sie müssten ihren MIME-Typ im Voraus kennen, um sie richtig zu decodieren. Daher gibt es keine Möglichkeit, das zu tun, was Sie brauchen, es sei denn, Sie gehen durch und versuchen, die Zeichenfolge in alle bekannten gültigen Dateitypen zu decodieren (was nicht wirklich eine praktikable Lösung ist). Vorwärts Sie müssen um das Präfix des MIME-Typs in der codierten Zeichenfolge beizubehalten.

    – Rory McCrossan

    17. September 2019 um 14:54 Uhr

  • Ich habe überall danach gesucht, aber einige Leute können Informationen aus dieser Zeichenfolge erhalten. ‘Funktion rateImageMime(data){ if(data.charAt(0)==’/’){ return “image/jpeg”; } sonst if(data.charAt(0)==’R’){ return “image/gif”; }else if(data.charAt(0)==’i’){ return “image/png”; } }’ Danke für deine Antwort.

    – Hikmet Tüysüz

    17. September 2019 um 14:56 Uhr


  • Es wäre hilfreich, wenn Sie einen Link posten würden, woher Sie diesen Code haben, und die Logik darin guessImageMime(). Der Hinweis liegt jedoch wahrscheinlich im Namen – “raten” -, also werden wahrscheinlich alle erwarteten Dateitypen überprüft, wie ich bereits erwähnt habe.

    – Rory McCrossan

    17. September 2019 um 14:58 Uhr

  • Kennen Sie diese Seite? base64.guru/converter/decode/file Es decodiert die Zeichenfolge, was auch immer Sie hinzufügen, und teilt den MIME-Typ mit. Wie kann es sein? Wenn es in Javascript nicht möglich ist, was ist mit anderen Sprachen?

    – Hikmet Tüysüz

    17. September 2019 um 15:14 Uhr


Benutzeravatar von Victor
Sieger

Sie können verwenden magische Zahlen um einen MIME-Typ zu erkennen (überprüfen Sie hier die Liste der Dateisignaturen). Dateisignaturen sind jedoch nicht 100 % zuverlässig und Sie können leicht auf Fehlalarme stoßen. Natürlich gibt es Aufgaben, bei denen eine solche Lösung mehr als ausreicht.

Wenn Sie also eine Base64-Zeichenfolge haben und ihren MIME-Typ mithilfe von Dateisignaturen identifizieren möchten, müssen Sie Base64 nicht decodieren. Ein viel schnellerer Weg ist, die Dateisignaturen als Base64 zu speichern und einfach zu prüfen, ob die Eingabe mit einer von ihnen beginnt. Ein einfaches Beispiel:

var signatures = {
  JVBERi0: "application/pdf",
  R0lGODdh: "image/gif",
  R0lGODlh: "image/gif",
  iVBORw0KGgo: "image/png",
  "/9j/": "image/jpg"
};

function detectMimeType(b64) {
  for (var s in signatures) {
    if (b64.indexOf(s) === 0) {
      return signatures[s];
    }
  }
}

// Some tests
console.log(detectMimeType('R0lGODdhAQABAPAAAP8AAAAAACwAAAAAAQABAAACAkQBADs="));
console.log(detectMimeType("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mP4z8AAAAMBAQD3A0FDAAAAAElFTkSuQmCC'));
console.log(detectMimeType('JVBERi0xLjUKJYCBgoMKMSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgMTQxL04gMjAvTGVuZ3'));
console.log(detectMimeType('/9j/4AAQSkZJRgABAQAAZABkAAD/2wCEABQQEBkSGScXFycyJh8mMi4mJiYmLj41NTU1NT5EQUFBQUFBRERERERERERE'));

  • was für bild/jpeg?

    – Biswas Khayargoli

    27. Juli 2021 um 7:38 Uhr

  • @BiswasKhayargoli Überprüfen Sie einfach, ob das erste Zeichen ist: ‘/’ (Schrägstrich)

    – Deepak

    29. September 2021 um 6:15 Uhr

  • @Deepak Sie werden auf viele Fehlalarme stoßen, wenn Sie nur das erste Zeichen überprüfen. Beispielsweise wird ein Schrägstrich übereinstimmen .mp3 und .tar.xz Dateien sowie verschiedene UTF-Byte-Order-Marks. Um die Genauigkeit zu verbessern, müssen Sie mindestens überprüfen /9j/ (siehe meine aktualisierte Antwort) oder verwenden Sie genauere Signaturen wie z /9j/2w, /9j/4A, /9j/7g, /9j/4Q.

    – Viktor

    2. Oktober 2021 um 11:10 Uhr

  • @Victor Ja stimmte zu. Könnte hilfreich sein, wenn es eine Reihe möglicher Optionen gibt, die überprüft werden müssen, ohne dass andere involviert sind / 😛

    – Deepak

    2. Oktober 2021 um 16:46 Uhr


Patricks Benutzeravatar
Patrick

Es gibt bestimmte Dateitypen, die angeben, um welchen Typ es sich in der Basis-64-Zeichenfolge handelt. Bei Bildern ändert sich das erste Zeichen.

“https://stackoverflow.com/” bedeutet JPEG.

‘i’ bedeutet png.

‘R’ bedeutet gif.

‘U’ bedeutet webp.

„J“ bedeutet PDF.

Diese sind jedoch nicht zuverlässig, da andere Dateien manchmal mit diesen Zeichen beginnen können. Ich habe den Decoder auf der von Ihnen erwähnten Website getestet und er funktioniert nicht für alle Dateitypen. Bei einigen Dateien wird nur eine allgemeine .bin-Datei zurückgegeben. Was die Erkennung angeht, könnte es versuchen, die Zeichenfolge zu decodieren und zu testen, ob ein bestimmter Dateityp passt. Sie könnten versuchen, Ihre eigene Lösung zu erstellen, die auf die gleiche Weise funktioniert, aber es wäre viel sinnvoller, den Dateityp anhand der Erweiterung zu erkennen, da Sie Zugriff darauf haben.

Gerade aktualisierte + minimierte Version der Antwort oben https://stackoverflow.com/a/58158656/8552163

const signatures = {
    JVBERi0: 'application/pdf',
    R0lGODdh: 'image/gif',
    R0lGODlh: 'image/gif',
    iVBORw0KGgo: 'image/png',
    '/9j/': 'image/jpg',
};

const getMimeType = (base64)=>{
    for(const sign in signatures)if(base64.startsWith(sign))return signatures[sign];
};

1438230cookie-checkWie bekomme ich MIME-TYPE von Base 64 String?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy