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-goWebActualCombat",压缩包内的主要内容是goWebActualCombat-master目录,这代表了一个完整的Go语言Web应用项目。通过这个项目,读者可以深入学习Go语言在构建Web应用时的各种...
标题“golang开发web应用示例(v0.03)”表明这是一个关于Go语言Web开发的实践项目,版本号为v0.03,可能意味着这是项目早期的一个迭代,包含了基本的功能和结构。在这个项目中,我们可以学习到如何从零开始构建一个...
下面将详细阐述Go语言Web编程的核心知识点,以及你可能会在教程资源中遇到的关键概念。 1. **Go语言基础**:在学习Go Web编程之前,理解Go语言的基础是必不可少的。Go语言由Google开发,其特性包括静态类型、垃圾...
《新手GoWeb编程PDF》是一份专为初学者设计的Go语言Web开发教程,它涵盖了从基础到进阶的全面内容,旨在帮助读者快速掌握Go语言及其在Web开发中的应用。Go语言,简称GoLang,是由Google公司开发的一种静态类型的、...
这本书是GOweb编程的电子版,就是那本新加坡的,内容清晰,目录齐全,就是内容排版有一丁点问题。绝逼可下载。
在Go语言Web编程中,首要涉及的基础知识是Go语言的基本语法。这包括变量、常量、数据类型(如整型、浮点型、字符串、布尔型)、流程控制(如if-else、for、switch语句)、函数、结构体与指针等。理解这些基础知识是...
### Go语言Web开发知识点概述 #### 一、Go语言简介 Go语言,也称为Golang,是由Google设计的一种静态类型的编程语言。它以其简洁的语法、高效的性能以及强大的并发处理能力而著称,在网络编程领域得到了广泛的应用...
《高清Go Web编程英文原版》是一本专为Go语言Web开发人员精心编写的经典教程。这本书详尽地探讨了如何使用Go语言构建高效、可扩展的Web应用程序。Go语言,由Google公司设计,以其简洁的语法、高效的性能以及内置的...
《Golang Web编程》英文版是一本专门针对使用Go语言进行Web开发的图书,适合对Go语言有一定了解并希望深入Web开发的读者。Go语言,由Google开发,以其简洁的语法、高效的性能以及内置的并发支持,近年来在Web开发...
这本书以英文原版呈现,旨在为读者提供深入且全面的Go语言Web编程知识。 Go语言,又称为Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的编程语言。它以其简洁的语法、高效的性能以及对...
Go语言,也称为Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言,特别适合构建高性能的Web服务。下面将详细讨论GoWeb编程中的关键知识点。 1. **Go语言基础**: - 语法特性:...
标题:“Go web语言学习(Golang)” 描述:“go语言,golang,Go是一种有表达力、简洁、清晰和有效率的编程语言。它的并行机制使其很容易编写多核和网络应用,而新。” Go语言,又称Golang,是一种静态类型、编译型...
《GoWeb进阶课程讲义》是一份专为已经掌握Go语言基础的开发者...以上就是《GoWeb进阶课程讲义》中的主要学习内容,通过系统学习,开发者可以深化对Go语言Web开发的理解,提高开发效率,构建更稳定、更高效的Web应用。
Go Web 编程.pdf
# web 项目开发脚手架 ## 项目分层模式 ### MVC - Model:模型代表一个存取数据的对象。它也可以带有逻辑,在数据变化时更新控制器。 - View:视图代表模型包含的数据的可视化。 - Controller:控制器作用于模型...