PHP-Editor Youzi erwähnte zwei Ordner im Dateisystem als Teil der Site-Adresse, als er virtuelle Ordner im Webserverpfad einführte. In der Go-Sprache wird dieses Konzept virtueller Ordner häufig in den Pfadeinstellungen von Webservern verwendet. Durch die Aufnahme dieser beiden Ordner als Teil der Site-Adresse können eine flexiblere Dateipfadverwaltung und Zugriffskontrolle erreicht werden. Dieses Entwurfsmuster vereinfacht nicht nur die Organisation von Site-Dateien, sondern sorgt auch für bessere Sicherheit und Wartbarkeit. Durch das Konzept virtueller Ordner können Entwickler Site-Ressourcen bequemer verwalten und steuern.
In meinem Dateisystem gibt es zwei Ordner „files1“ und „files2“.
Ich kann einen Ordner im Dateisystem wie folgt als virtuellen Ordner im Site-Adresspfad hosten:
http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("./files1"))))
Wie hoste ich den Inhalt der Ordner „files1“ und „files2“ im selben Pfad der Site-Adresse „/public/“?
Eine einfache Lösung besteht darin, die Schnittstelle http.filesystem zu implementieren.
Hier ist die Demo:
package main import ( "errors" "io/fs" "net/http" ) func main() { http.handle("/public/", http.stripprefix("/public/", http.fileserver(mergeddir{ dir1: "./files1", dir2: "./files2", }))) http.listenandserve(":8080", nil) } type mergeddir struct { dir1 http.dir // dir1 will be tried first so it has higher priority. dir2 http.dir } func (d mergeddir) open(name string) (http.file, error) { f, err := d.dir1.open(name) if err != nil { if errors.is(err, fs.errnotexist) { return d.dir2.open(name) } } return f, err }
Ich habe es mit dieser Verzeichnisstruktur getestet:
├── files1 │ ├── f1-1.txt │ └── f1-sub │ └── f1-s.txt └── files2 ├── f1-1.txt ├── f2-1.txt └── f2-sub └── f2-s.txt
Es gibt zwei in f1-1.txt
,由于先尝试files1
,所以服务的是files1
.
Update:
Wie vom Autor gewünscht, unterstützt eine andere Version von mergeddir
mehrere Verzeichnisse:
type mergedDir struct { Dirs []http.Dir } func (d mergedDir) Open(name string) (http.File, error) { for _, dir := range d.Dirs { f, err := dir.Open(name) if err == nil { return f, nil } if !errors.Is(err, fs.ErrNotExist) { return f, err } } return nil, fs.ErrNotExist }
Das obige ist der detaillierte Inhalt vonZwei Ordner im Dateisystem als virtueller Ordner im Pfad der Site-Adresse (Webserver in Go). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!