Я не понимаю, почему вы захотите повторно использовать <input type="file">
или , как вы бы использовали системный браузер файлов, чтобы сделать это.
Ваша проблемаутверждение было бы намного проще, если бы вы просто перечислили файлы, доступные в каталоге, а затем выполнили действие на основе этой информации.
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
)
func main() {
r := http.NewServeMux()
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
files, err := ioutil.ReadDir(".")
if err != nil {
log.Fatal(err)
}
out := "<ul>"
for _, f := range files {
v := url.Values{}
v.Add("file", f.Name())
out += fmt.Sprintf(`<li><a href="/do?%s">%s</a></li>`, v.Encode(), f.Name())
}
out += "</ul>"
w.Header().Set("Content-Type", "text/html")
fmt.Fprintf(w, out)
})
r.HandleFunc("/do", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, r.URL.Query().Get("file"))
})
server := &http.Server{
Addr: ":8080",
Handler: r,
}
if err := server.ListenAndServe(); err != nil {
log.Fatal(err)
}
}
https://play.golang.org/p/bSgm4nAUUYg
Примечание: Этот код не безопасен для производства.Вам нужно беспокоиться о людях, которые могут получить доступ к каталогам выше, где вы находитесь ..
, и о всевозможных забавных вещах, связанных с обменом информацией о сервере.Но это только для того, чтобы помочь вам начать работу.
Тогда вам не нужно беспокоиться о том, что браузер передает вам, вы полностью контролируете.