所有的新技術都經曆了一些成長的痛苦,區塊鏈技術也一樣。但是,儘管它還處於發展的早期階段,但它具有改進許多行業、許多應用和系統的巨大潛力。
Go語言具有其關鍵特性。Go語言之所以如此強大,是因為它在服務端的開發中總能抓住程式員的痛癢需求,用最直接、簡單、高效、穩定的方式來解決並實現問題。
package main
import (
"net/http"
"os"
"io"
"strconv"
)
func main() {
f, err := os.OpenFile("K:/file.mp3", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
stat, err := f.Stat() //擷取檔案狀態
if err != nil { panic(err) } //把檔案指標指到檔案末,當然你說為何不直接用 O_APPEND 模式開啟,沒錯是可以。我這裡只是實驗。
url :=
req,_ := http.NewRequest("GET",url,nil);
req.Header.Set("Range", "bytes=" + strconv.FormatInt(stat.Size(),10) + "-")
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
written, err := io.Copy(f, resp.Body)
if err != nil { panic(err) }
println("written: ", written)
}
伺服器的話就更簡單了,這個是忽略url中的/assets/,直接找到對應的raido目錄
var staticHandler http.Handler
// 靜態檔案處理
func StaticServer(w http.ResponseWriter, req *http.Request) {
fmt.Println("path:" + req.URL.Path)
staticHandler.ServeHTTP(w, req)
}
func init(){
staticHandler = http.StripPrefix("/assets/", http.FileServer(http.Dir("radio")))
}
func main() {//已經有靜態檔案了
http.HandleFunc("/assets/",StaticServer)
err := http.ListenAndServe(":3000", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
處理多檔案上傳,如果是以數組的形式post,後面那個[]不要忘記,因為golang保留了那個中括弧.
如果form裡面變數都是唯一的,直接用parseformvalue,和parsefile就可以,因為返回的都是單個變數而不是一個數組了,省的另外運算元組。
if r.Method == "POST" {
r.ParseMultipartForm(8 << 20)
title := r.ParseFormValue["title"]
fhs := r.MultipartForm.File["radio[]"]
options := r.MultipartForm.Value["options[]"]
answers := r.MultipartForm.Value["answers[]"]
l := len(options)
optionDirs := make([]string, l)
t := time.Now()
for i := 0; i < l; i++ {
file, err := fhs[i].Open()
if err != nil {
panic(err)
}
filename := fhs[i].Filename
f, err := os.OpenFile("statics/"+filename, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
panic(err)
}
defer f.Close()
io.Copy(f, file)
optionDirs = append(optionDirs, filename)
}
db.InsertHomework(&db.HomeWork{
Title: title,
Options: options,
OptionDirs: optionDirs,
Answers: answers,
Time: t,
})
sess := session.GlobalSessionManager.SessionStart(w, r)
if sess != nil {
sess.Set("flash", true)
}
defer sess.SessionRelease()
http.Redirect(w, r, "/homeworks", http.StatusFound)
}
高能預警,兄弟連教育區塊鏈直播課程8月持續火爆來襲!
原價1188元的12節區塊鏈進階課程,現僅需1元!
還可免費領取《Go語言基礎實戰項目開發》與《Go語言進階實戰項目開發》教材兩本!!
限時限量!!先到先得!!
http://www.ydma.cn/open/course/24
關注兄弟連區塊鏈技術公眾號領取更多技術乾貨哦!!!