name2mime - Jednoduchý balíček uzlů pro získání MIME typů souborů

Pozadí

Nedávno jsem měl klienta, který chtěl na svém kbelíku S3 spouštěč Lambda, který zapisuje nějaké soubory do adresáře v jeho kbelíku. Všechno šlo dobře, kromě toho, že typ obsahu všech souborů byl nastaven na application/octet-stream . Takže chtěl, abych tento problém vyřešil tak, že když vložíme objekt do kbelíku, ContentType se nastaví na vhodný. Myslel jsem, že to bude trvat sotva hodinu. Vše, co bych musel udělat, je vyhledat balíček uzlu, nainstalovat jej a problém je vyřešen. Ale ne. NE!

Ukončení řešení

  1. mmmagic:
    Je to skvělý balíček, používá vazbu v jazyce C za scénou, jako vstup bere vyrovnávací paměť a chrlí spoustu metadat o souboru.

    Omezení :Po předání SVG/DXF je kategorizuje jako text/html.

  2. typ souboru:
    Jako vstup bere také vyrovnávací paměť souboru a vrací typ MIME.

    Omezení :Při předání SVG/DXF nebo jiného druhu souborů se znovu naladí null/undefined .

  3. mimický typ:
    Jako vstup bere vyrovnávací paměť souboru a výchozí hodnotu, a pokud není určen typ souboru, vrací tuto výchozí hodnotu.

    Omezení :Stejné výsledky jako zde, přiřazovalo výchozí hodnotu pro SVF/DXF a některé další soubory.

  4. ext2mime:
    Tento funguje v módě podobně jako ten, který jsem vytvořil. Převezme název souborů a vyplivne své typy MIME.

    Omezení :Datová sada rozšíření byla velmi omezená a nedokázala rozpoznat všechny druhy souborů.

Podporováno více než 600 rozšíření

Žádné kredity pro mě. Díky dobrým klukům z FreeFormatter. Napsal jsem jednoduchý skript v konzole prohlížeče, abych extrahoval všechna rozšíření z jejich webu.

document.write(JSON.stringify(Array.from(document.getElementsByClassName('bordered-table zebra-striped table-sort')[0].children[1].children).reduce((obj, row) => {
    let objs = {...obj};
    row.children[2].childNodes[0].data.split(', ').map(ext => objs = objs[ext] ? objs : ({...objs, [ext]: {'type': row.children[1].childNodes[0].data, 'name': row.children[0].childNodes[0].data}}))
    return objs;
}, {})))

Stiskněte ENTER!

Začlenění myšlenky do balíčku NPM

Použil jsem tento úžasný standardní kód k vytvoření balíčku NPM. Již měl šablonu pro testovací případy a Travis-CI, takže kdykoli vložím svůj kód do githubu, automaticky spustí testovací případy a aktualizuje stav na mé domovské stránce repo. Úžasné, že?

Instalace

$ npm install name2mime --save

nebo

$ yarn add name2mime

Ukázka

const getMime = require('name2mime');

const value = getMime('filename.jpg');

console.log(value);

// { type: 'image/jpeg', name: 'JPEG Image' }

Pro správce a přispěvatele

Příkazy

  • npm run clean - Odstraňte lib/ adresář
  • npm test - Spusťte testy s výsledky linolea a pokrytí.
  • npm test:only - Spusťte testy bez žmolků nebo pokrytí.
  • npm test:watch - Můžete dokonce znovu spustit testy změn souborů!
  • npm test:prod - Spusťte testy s miniifikovaným kódem.
  • npm run test:examples - Testujte písemné příklady na čistém JS pro lepší pochopení použití modulu.
  • npm run lint - Spusťte ESlint pomocí airbnb-config
  • npm run cover – Získejte zprávu o pokrytí pro svůj kód.
  • npm run build - Babel transpiluje ES6 => ES5 a minimalizuje kód.
  • npm run prepublish - Háček pro npm. Před publikováním modulu proveďte všechny kontroly.