package main
import (
"io"
"io/ioutil"
"log"
"os"
"net/http"
)
const (
UPLOAD_DIR = "uploads"
)
func uploadHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
io.WriteString(w, "<html><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></html>")
return
}
if r.Method == "POST" {
f, h, err := r.FormFile("image")
if err != nil {
http.Error(w, err.Error(),
http.StatusInternalServerError)
return
}
filename := h.Filename
defer f.Close()
t, err := os.Create(UPLOAD_DIR + "/" + filename)
if err != nil {
log.Println("create dir has error");
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 viewHandler(w http.ResponseWriter, r *http.Request) {
imageId := r.FormValue("id")
imagePath := UPLOAD_DIR + "/" + imageId
if exists := isExists(imagePath);!exists {
http.NotFound(w, r)
return
}
w.Header().Set("Content-Type", "image")
http.ServeFile(w, r, imagePath)
}
func isExists(path string) bool {
_, err := os.Stat(path)
if err == nil {
return true
}
return os.IsExist(err)
}
func listHandler(w http.ResponseWriter, r *http.Request) {
fileInfoArr, err := ioutil.ReadDir("uploads")
if err != nil {
http.Error(w, err.Error(),
http.StatusInternalServerError)
return
}
var listHtml string
for _, fileInfo := range fileInfoArr {
imgid := fileInfo.Name()
listHtml += "<li><a href=\"/view?id="+imgid+"\">imgid</a></li>"
}
io.WriteString(w, "<html><ol>"+listHtml+"</ol></html>")
}
func main() {
http.HandleFunc("/", listHandler)
http.HandleFunc("/upload", uploadHandler)
http.HandleFunc("/view", viewHandler)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err.Error())
}
}
分享到:
相关推荐
go语言web编程权威教程
1.1 使用Go语言构建Web应用 3 1.1.1 Go与可扩展Web应用 4 1.1.2 Go与模块化Web应用 4 1.1.3 Go与可维护的Web应用 5 1.1.4 Go与高性能Web应用 5 1.2 Web应用的工作原理 6 1.3 HTTP简介 7 ...
Go Web编程,go语言web编程,初学者可以看看 分享给大家
Go Web 编程.pdf
值得一提的是,本书在教授 Go Web 开发方法时,基本上只会用到 Go 语言自带的标准库,而不会用到任何特定的 Web 框架:这使得读者学习到的知识不会受到特定的框架所限制,即使将来有需要用到现成的框架又或者自行...
Go Web Programming 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
重磅!《Go Web编程实战派从入门到精通》随书源码开源啦,Go语言-Web-goWebActualCombat
GoWeb编程GoWeb编程
Go Web Programming 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Go Web Programming teaches you how to build scalable, high-performance web applications in Go using modern design principles. About the Technology The Go language handles the demands of scalable, ...
2.Go语言基础 2.1. 你好,Go 2.2. Go基础 2.3. 流程和函数 2.4. struct 2.5. 面向对象 2.6. interface 2.7. 并发 2.8. 小结 3.Web基础 3.1 web工作方式 3.2 Go搭建一个简单的web服务 3.3 Go如何使得web工作 3.4 Go的...
Go Web开发进阶实战(gin框架)课程,适用于Go语言初学者、掌握Go语言基础语法想学习进阶内容。 由在职程序员打造的Go语言实战课程体系,与你分享企业项目开发经验与技巧。真正做到课程有内容、有深度,并且老师讲...
值得一提的是,本书在教授 Go Web 开发方法时,基本上只会用到 Go 语言自带的标准库,而不会用到任何特定的 Web 框架:这使得读者学习到的知识不会受到特定的框架所限制,即使将来有需要用到现成的框架又或者自行...
go web编程chm手册,2018年全新编译,基于astaxie的github开源项目编译完成,适合go语言爱好者学习入门,提高,是一个对go语言快速学习上手的手册,你值得拥有。另外要声明:现在网上流传的go web编程,是我个人2015...
golang web编程教程资源很好的东西,golang web编程教程资源很好的东西
Go Web Programming teaches you how to build scalable, high-performance web applications in Go using modern design principles. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub ...
因为自己对Web开发比较感兴趣,所以最近抽空在写一本开源的书籍《Go Web编程》《Build Web Application with Golang》。写这本书不表示我能力很强,而是我愿意分享,和大家一起分享Go写Web应用的一些东西。 对于从...
go语言web编程chm版
Go WEB 编程 PDF Go WEB 编程 PDF Go WEB 编程 PDF Go WEB 编程 PDF
用go语言进行web开发必读的经典书籍。