Wiem, że Express ma metodę res.contentType(), ale jak ustawić automatycznie typ zawartości na podstawie ścieżki/pliku (w tym treści statycznej)?Express: Ustawianie typu zawartości na podstawie ścieżki/pliku?
Odpowiedz
Connect automatycznie ustaw typ zawartości, chyba że ustawisz ją samodzielnie. Oto fragment, który to robi. Wykorzystuje mime.lookup i mime.charsets.lookup
// mime type
type = mime.lookup(path);
//<SNIP>....
// header fields
if (!res.getHeader('content-type')) {
var charset = mime.charsets.lookup(type);
res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''));
}
Jeśli to nie działa dla Ciebie, jak pisać kod niestandardowy kod jest prawdopodobnie zakłóca zachowanie domyślne jakoś.
Pokazuje, że może to zrobić, jeśli przekażesz nazwę pliku.
var filename = 'path/to/image.png';
res.contentType(filename);
// Content-Type is now "image/png"
[Edytuj]
Oto przykład, który służy plików z względnym katalogu o nazwie static
i automatycznie ustawia typ zawartości na podstawie pliku serwowane:
var express = require('express');
var fs = require('fs');
var app = express.createServer();
app.get('/files/:file', function(req, res) {
// Note: should use a stream here, instead of fs.readFile
fs.readFile('./static/' + req.params.file, function(err, data) {
if(err) {
res.send("Oops! Couldn't find that file.");
} else {
// set the content type based on the file
res.contentType(req.params.file);
res.send(data);
}
res.end();
});
});
app.listen(3000);
Dzięki, ale to, co chcę, aby uniknąć ... po prostu ma to być automatyczny na podstawie ścieżki lub pliku. – mahemoff
Nie jestem pewien, czy rozumiem. Czy możesz podać mały przykład? –
Zaktualizowałem swoją odpowiedź na przykładzie. Czy nadal nie rozumiem tego, czego szukasz? –
Express korzysta Połącz Connect wykorzystuje Mim, Mime i zawiera pliki mime.types (z domyślnych typów MIME z Apache) oraz node.types (z pewnymi dalszymi rodzajami wnoszonych przez społeczność węzła) . Możesz po prostu dostosować jeden z tych plików w swojej kopii mima w module node_modules, aby dodać wymagany typ zawartości, lub Mime ma również interfejs API, który pozwala określić dodatkowe typy zawartości lub pliki .types do załadowania z twojego kodu.
Dodawanie definicji mime przez 'require (" mime "). Define (...)' nie działa. Może to dlatego, że ekspresowe pakiety to własny moduł mime? Jak uzyskać dostęp do dołączonego modułu mime? – panzi
Ponadto, jeśli chcesz przedłużyć MIME typy, które wyrażają (połączyć) wie o, można zrobić
express.static.mime.define({'text/plain': ['md']});
lub
connect.static.mime.define({'text/plain': ['md']});
PS: mim moduł znajduje się teraz pod adresem https://github.com/broofa/node-mime
Pobierz to database (lub Another link): mime.types:, następnie
var db_mimes=[],mime_ext=''
$.get('mime.types',{},function(d){
var lines=d.split('\n').filter(function(e){ /* filter which starts with #*/})
lines.forEach(function(line){
mime_ext=line.split(' ')
mime_ext[1].split(' ').forEach(function(ext){
db_mimes.push({e:ext,m:mime_ext[0]})
});
//create object for each line . i.e: {mime:'',extension}
});
});
Następnie, jeśli masz fo przykład var fname="myfile.png"
var extension=fname.substr((~-this.lastIndexOf(".") >>> 0) + 2) // get extension from name
var minme=db_mimes.filter(function(el){return el.e === extension})[0]
odrzucono ze względu na zerwany link –
Zmieniam link, kliknij ponownie i usuń głosowanie: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types –
dzięki Abdennour –
uruchom następujące polecenie cmd:
npm install xmimetype ;
Następnie w kodzie:
var xm=require("xmimetype");
xm.mimetypeOf("java");
xm.mimetypeOf("./lib/Person.java");
// -> text/x-java-source
xm.mimetypeOf("docx");
xm.mimetypeOf("./lib/overview.docx");
// -> application/vnd.openxmlformats-officedocument.wordprocessingml.document
Aby uzyskać więcej informacji, sprawdź GIT repository.
Przeciwieństwem jest dostępny:
xm.extensionsOf("image/jpeg");
// -> [ 'jpeg', 'jpg', 'jpe' ]
- 1. Ustawianie typu zawartości na obiekcie blobowym
- 2. Ustawianie stylu na podstawie istnienia typu przodka
- 3. Ustawianie tła obiektu DataGridRow na podstawie zawartości komórki
- 4. Ustawianie typu zawartości odpowiedzi bez użycia HttpServletResponse
- 5. Ustawianie tła kontroli zawartości
- 6. Filtrowanie listy łańcuchów na podstawie zawartości
- 7. Algorytm szacowania szerokości tekstu na podstawie zawartości
- 8. Rozmiary okna SmartGWT na podstawie zawartości
- 9. Ustawianie niestandardowych właściwości niestandardowego typu pól w ramach funkcji typu zawartości
- 10. JQGrid: Dynamicznie ustawiam komórkę na nieedytowalną na podstawie zawartości
- 11. Zmiana typu UIKeyboardType na podstawie wprowadzania tekstu
- 12. listy wyrwy na podstawie typu struct zmieniającym
- 13. Dodaj niestandardowy nagłówek na podstawie typu pliku
- 14. Zmiana trasy Rails na podstawie typu wdrożenia
- 15. Ustawianie protokołu SMTP w usługach IIS Express
- 16. Ustawianie zawartości widoku sieci Web na ciąg znaków html (kakao)
- 17. Nuget - Ustawianie CopyToOutputDirectory dla zawartości w podfolderach
- 18. WinHttp.WinHttpRequest dodanie do zawartości typu
- 19. Ustawianie opisu zawartości menu opcji android Talkback
- 20. Ustawianie przezroczystości na podstawie wartości pikseli w Matplotlib
- 21. Ustawianie różnych środowisk (programowanie, produkcja) na podstawie adresu URL
- 22. Ustawianie identyfikatora elementu utworzonego na podstawie elementu szablonu
- 23. Jak wybrać węzeł XML na podstawie jego zawartości?
- 24. jQuery do zmiany zawartości w div na podstawie pozycji przewijania
- 25. Jak ustawić wysokość wiersza na podstawie jego zawartości w tabeli?
- 26. Wordpress - pobierz wpis na podstawie zawartości pola meta
- 27. Tekst do zmiany rozmiaru na podstawie długości zawartości
- 28. Bindowanie danych WPF: włączyć/wyłączyć sterowanie na podstawie zawartości var?
- 29. selektor jQuery: znajdowanie komórki tabeli na podstawie zawartości
- 30. Usuwanie elementów z mapy na podstawie zawartości innej mapy
'mime.lookup()' jest teraz przemianowany na 'mime.getType()'. – Pei