Я не могу придумать способ использования этой входной строки, но если вы можете изменить ее на
str = "a=2&b=3.05&c='testing'"
(обратите внимание на одиночные кавычки), вы можете использовать функцию eval для каждого и пусть Ruby угадывает типы.
Я не понимаю, почему вы захотите повторно использовать <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
Примечание: Этот код не [ 1111] производственный сейф. Вам нужно беспокоиться о людях, которые могут получить доступ к каталогам выше, где вы находитесь
blockquote>..
, и о всевозможных забавных вещах, связанных с обменом информацией о сервере. Но он просто призван помочь вам начать работу.Тогда вам не нужно беспокоиться о том, что передает вам браузер, вы полностью контролируете ситуацию.