日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用go来搭建一个简单的图片上传网站

發布時間:2024/3/7 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用go来搭建一个简单的图片上传网站 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?提前說明一下:代碼參考了《Go語言編程》,稍有變動, 自己親自玩了一遍。

?

? ? ? ?之前玩過go web server, 現在來用go來搭建一個簡單的圖片上傳網站, 工作目錄是:~/photoweb , 而~/photoweb/uploads用來存圖片,代碼photoweb.go在~/photoweb目錄下。

? ? ? ?看服務器代碼, ~/photoweb/photoweb.go的內容為:

package mainimport ("io""os""log""net/http" )const (UPLOAD_DIR = "./uploads" )func uploadHandler(w http.ResponseWriter, r *http.Request) {if r.Method == "GET" {str := `<html><head><meta charset="utf-8"><title>Upload</title></head><body><form method="POST" action="/upload" enctype="multipart/form-data">Choose an image to upload: <input name="image" type="file" /><input type="submit" value="Upload" /></form></body></html>`io.WriteString(w, str)}// 處理圖片上傳if r.Method == "POST" {f, h, err := r.FormFile("image")if err != nil {http.Error(w, err.Error(),http.StatusInternalServerError)return}filename := h.Filenamedefer f.Close()t, err := os.Create(UPLOAD_DIR + "/" + filename)if err != nil {http.Error(w, err.Error(),http.StatusInternalServerError)return}defer t.Close()if _, err := io.Copy(t, f); err != nil {http.Error(w, err.Error(),http.StatusInternalServerError)return}}}func main() {http.HandleFunc("/upload", uploadHandler)err := http.ListenAndServe(":8080", nil)if err != nil {log.Fatal("ListenAndServe: ", err.Error())} }

? ? ? ?在瀏覽器中執行:http://127.0.0.1:8080/upload

? ? ? ?后臺代碼進入GET分支, 給瀏覽器端返回一段html代碼,展示成html元素, 供用戶上傳圖片, 選擇圖片, 點擊Upload按鈕上傳后, 后臺代碼進入POST分支, 于是把圖片存到了~/photoweb/uploads中。實際check了一下, 該目錄下果然有此圖片。

?

? ? ? ?為了便于在瀏覽器上直接查看上傳的圖片, 可以修改下服務器代碼, 增加Redirect, 如下:

package mainimport ("io""os""log""net/http" )const (UPLOAD_DIR = "./uploads" )func uploadHandler(w http.ResponseWriter, r *http.Request) {if r.Method == "GET" {str := `<html><head><meta charset="utf-8"><title>Upload</title></head><body><form method="POST" action="/upload" enctype="multipart/form-data">Choose an image to upload: <input name="image" type="file" /><input type="submit" value="Upload" /></form></body></html>`io.WriteString(w, str)}// 處理圖片上傳if r.Method == "POST" {f, h, err := r.FormFile("image")if err != nil {http.Error(w, err.Error(),http.StatusInternalServerError)return}filename := h.Filenamedefer f.Close()t, err := os.Create(UPLOAD_DIR + "/" + filename)if err != nil {http.Error(w, err.Error(),http.StatusInternalServerError)return}defer t.Close()if _, err := io.Copy(t, f); err != nil {http.Error(w, err.Error(),http.StatusInternalServerError)return}http.Redirect(w, r, "/view?id="+filename, http.StatusFound)}}func isExists(path string) bool {_, err := os.Stat(path)if err == nil {return true}return os.IsExist(err) }func viewHandler(w http.ResponseWriter, r *http.Request) {imageId := r.FormValue("id")imagePath := UPLOAD_DIR + "/" + imageIdif exists := isExists(imagePath); !exists {http.NotFound(w, r)return}w.Header().Set("Content-Type", "image")http.ServeFile(w, r, imagePath) }func main() {http.HandleFunc("/view", viewHandler)http.HandleFunc("/upload", uploadHandler)err := http.ListenAndServe(":8080", nil)if err != nil {log.Fatal("ListenAndServe: ", err.Error())} }

? ? ? ?重啟服務,重新訪問http://127.0.0.1:8080/upload, 然后選擇圖片, 點擊Upload上傳, 結果在服務器對應的目錄中有該圖片, 且在瀏覽器中顯示了該圖片。

? ? ? ?如上代碼很簡單, 我之前在Apatch下寫過類似的圖片上傳服務器, 道理基本相同。

?

? ? ? ?好了, 不多說。

? ? ? ??

?

總結

以上是生活随笔為你收集整理的用go来搭建一个简单的图片上传网站的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。