2,190
社区成员
发帖
与我相关
我的任务
分享
package main
import (
"fmt"
"log"
"net/http"
)
type DB struct{}
type WebServer struct {
db *DB
}
func (ws *WebServer) ConnectToDB(source string) error {
// connecting to db...
return nil
}
func (ws *WebServer) Upload(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "uploading to db...")
}
func main() {
ws := WebServer{}
if err := ws.ConnectToDB("db source"); err != nil {
log.Fatal(err)
return
}
http.HandleFunc("/upload", ws.Upload)
http.ListenAndServe(":8080", nil)
}
session, err := mgo.Dial("127.0.0.1")
if err != nil {
panic(err)
}
defer session.Close()
db := session.DB("filedb")
file, err := db.GridFS("fs").Create(file-path-name)
然后运行过后可以实现文件存到数据库,只是我这段代码是在upload里面的每次上传文件都会从新执行一次数据库的连接session, err := mgo.Dial("127.0.0.1")
if err != nil {
panic(err)
}
defer session.Close()
db := session.DB("filedb")
这段代码我放到mian()里面的话只执行一次可是在upload里面又找不到db,只能放到upload里面每次上传重复执行?[/quote]
解决这个问题只要把db放到自己的struct里就好了。
package main
import (
"fmt"
"log"
"net/http"
)
type DB struct{}
type WebServer struct {
server http.Server
db *DB
}
func (ws *WebServer) ConnectToDB(source string) error {
// connecting to db...
return nil
}
func (ws *WebServer) Upload(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "uploading to db...")
}
func main() {
ws := WebServer{}
if err := ws.ConnectToDB("db source"); err != nil {
log.Fatal(err)
return
}
mux := http.NewServeMux()
mux.HandleFunc("/upload", ws.Upload)
ws.server.Handler = mux
ws.server.Addr = ":8080"
ws.server.ListenAndServe()
}
session, err := mgo.Dial("127.0.0.1")
if err != nil {
panic(err)
}
defer session.Close()
db := session.DB("filedb")
file, err := db.GridFS("fs").Create(file-path-name)
然后运行过后可以实现文件存到数据库,只是我这段代码是在upload里面的每次上传文件都会从新执行一次数据库的连接session, err := mgo.Dial("127.0.0.1")
if err != nil {
panic(err)
}
defer session.Close()
db := session.DB("filedb")
这段代码我放到mian()里面的话只执行一次可是在upload里面又找不到db,只能放到upload里面每次上传重复执行?
package main
import(
"net/http"
"crypto/md5"
"fmt"
"io"
"log"
)
var txt = `
<html>
<head>
</head>
<body>
<form action="/upload" enctype="multipart/form-data" method="post">
请选择要计算MD5的文件:<input type="file" name="file" />
<br>
<input type="submit" value="upload" />
</form>
</body>
</html>
`
func main() {
http.HandleFunc("/", serve)
http.HandleFunc("/upload", upload)
http.ListenAndServe(":8080", nil)
}
func serve(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(txt))
}
func upload(w http.ResponseWriter, r *http.Request) {
f, _, err := r.FormFile("file")
if err != nil {
log.Printf("error: %s", err)
return
}
defer f.Close()
h := md5.New()
if _, err := io.Copy(h, f); err != nil {
log.Printf("error: %s", err)
return
}
fmt.Fprintf(w, "md5sum: %x", h.Sum(nil))
}