Go文件函数_上传
服務器
1.從表單獲取數據 r.FormFile("name")? ? ? ?<input type="file" name="file">
2.讀取表單數據至內存中data, err := ioutil.ReadAll(file)? ?(ioutil包流式讀寫)? ?(php是$_FILES)
3.獲取get請求的參數????fn := p.ByName("vid-id")? ? ? ? html中:action="http://127.0.0.1:9000/upload/2"
4.寫入到服務器硬盤中? err = ioutil.WriteFile(VIDEO_DIR + fn, data, 0777)? ? (PHP是move_uploadfile_to)
5.返回結果給客戶端w.WriteHeader(http.StatusCreated)????io.WriteString(w, "Uploaded successfully")
func uploadHandler(w http.ResponseWriter, r *http.Request, p httprouter.Params) {// 能夠讀取到的最大的緩沖區內容r.Body = http.MaxBytesReader(w, r.Body, MAX_UPLOAD_SIZE)// ParseMultipartForm表單的最大if err := r.ParseMultipartForm(MAX_UPLOAD_SIZE); err != nil {sendErrorResponse(w, http.StatusBadRequest, "File is too big")return }// 從表單拿到文件// file對應表單的name// 第二個是類型file, _, err := r.FormFile("file")if err != nil {log.Printf("Error when try to get file: %v", err)sendErrorResponse(w, http.StatusInternalServerError, "Internal Error")return }// 讀取到我們數據里面 data, err := ioutil.ReadAll(file)if err != nil {log.Printf("Read file error: %v", err)sendErrorResponse(w, http.StatusInternalServerError, "Internal Error")}// 獲取文件名fn := p.ByName("vid-id")// 保存文件err = ioutil.WriteFile(VIDEO_DIR + fn, data, 0777)if err != nil {log.Printf("Write file error: %v", err)sendErrorResponse(w, http.StatusInternalServerError, "Internal Error")return}// 反饋code與信息w.WriteHeader(http.StatusCreated)io.WriteString(w, "Uploaded successfully") }表單
<!DOCTYPE html> <html> <head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>??????</title><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" type="text/css" media="screen" href="main.css" /><script src="main.js"></script> </head> <body><form enctype="multipart/form-data" action="http://127.0.0.1:9000/upload/2" method="post">{{/*1.file input*/}}<input type="file" name="file">{{/*2.submit button*/}}<input type="submit" value="uplad file"></form> </body> </html>?
總結
- 上一篇: 西&lrm;安小叶紫檀家具价格?
- 下一篇: Go的sync(一)