Editor PHP Youzi menyebut dua folder dalam sistem fail sebagai sebahagian daripada alamat tapak apabila memperkenalkan folder maya dalam laluan pelayan web. Dalam bahasa Go, konsep folder maya ini digunakan secara meluas dalam tetapan laluan pelayan web. Dengan memasukkan kedua-dua folder ini sebagai sebahagian daripada alamat tapak, pengurusan laluan fail dan kawalan akses yang lebih fleksibel boleh dicapai. Corak reka bentuk ini bukan sahaja memudahkan penyusunan fail tapak, tetapi juga menyediakan keselamatan dan kebolehselenggaraan yang lebih baik. Melalui konsep folder maya, pembangun boleh mengurus dan mengawal sumber tapak dengan lebih mudah.
Terdapat dua folder "files1" dan "files2" dalam sistem fail saya.
Saya boleh mengehoskan folder dalam sistem fail sebagai folder maya dalam laluan alamat tapak seperti ini:
http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("./files1"))))
Bagaimana untuk mengehoskan kandungan folder "files1" dan "files2" pada laluan yang sama dengan alamat tapak "/public/"?
Penyelesaian mudah ialah melaksanakan antara muka http.filesystem.
Ini demonya:
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 }
Saya telah menguji dengan struktur direktori ini:
├── files1 │ ├── f1-1.txt │ └── f1-sub │ └── f1-s.txt └── files2 ├── f1-1.txt ├── f2-1.txt └── f2-sub └── f2-s.txt
Ada dua dalam f1-1.txt
,由于先尝试files1
,所以服务的是files1
.
Kemas kini:
Seperti yang diminta oleh pengarang, versi lain mergeddir
menyokong berbilang direktori:
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 }
Atas ialah kandungan terperinci Dua folder dalam sistem fail sebagai folder maya dalam laluan alamat tapak (pelayan web dalam Go). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!