所有的新技术都经历了一些成长的痛苦,区块链技术也一样。但是,尽管它还处于发展的早期阶段,但它具有改进许多行业、许多应用和系统的巨大潜力。
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
关注兄弟连区块链技术公众号领取更多技术干货哦!!!
有疑问加站长微信联系(非本文作者)