package main

import (
"io/ioutil"
"os"
"io"
"log"
"net/http"
) const (
UPLOAD_DIR = "./upload"
) func main(){
http.HandleFunc("/",listHandler)
http.HandleFunc("/upload",uploadHandler)
http.HandleFunc("/view",viewHandler)
err := http.ListenAndServe("127.0.0.1:8080",nil) if err != nil {
log.Fatal("ListenAndServe:", err.Error())
}
} 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>")
} 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 {
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)
} return
} func viewHandler(w http.ResponseWriter, r *http.Request){ id := r.FormValue("id")
path := UPLOAD_DIR + "/" + id if !hasfile(path) {
http.NotFound(w,r)
return
} w.Header().Set("Content-Type","image")
http.ServeFile(w,r,path)
} func hasfile(path string) bool { _,err := os.Stat(path)
if err == nil {
return true
} return os.IsExist(err)
} func listHandler(w http.ResponseWriter, r *http.Request){
fileInfo,err := ioutil.ReadDir("./upload") if err != nil {
http.Error(w,err.Error(),http.StatusInternalServerError)
return
} var html string
html += "<html><ol>"
for _,info := range fileInfo {
id := info.Name()
html += "<li><a href=\"view?id=" + id + "\">" + id + "</a></li>"
}
html += "</ol></html>" io.WriteString(w,html)
}

## 简单的图片管理网站

Go.网络篇-2的更多相关文章

  1. iOS开发网络篇—数据缓存

      iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...

  2. iOS开发网络篇—监测网络状态(转)

    文章转载自:http://www.cnblogs.com/wendingding/p/3950114.html iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时 ...

  3. iOS开发网络篇—大文件的多线程断点下载

    http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...

  4. iOS开发网络篇—简单介绍ASI框架的使用

    iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...

  5. iOS开发网络篇—网络编程基础

    iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...

  6. iOS开发网络篇—搭建本地服务器

    iOS开发网络篇—搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache- ...

  7. iOS开发网络篇—HTTP协议

    iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  8. iOS开发网络篇—NSURLConnection基本使用

    iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据 ...

  9. iOS开发网络篇—GET请求和POST请求

    iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFo ...

  10. iOS开发网络篇—数据安全

    iOS开发网络篇—数据安全 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题. 如:可以利用软件(比如Charles)设 ...

随机推荐

  1. “全栈2019”Java第四十五章:super关键字

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. 初探 模拟退火算法 POJ2420 HDU1109

    模拟退火算法来源于固体退火原理,更多的化学物理公式等等这里不再废话,我们直接这么来看 模拟退火算法简而言之就是一种暴力搜索算法,用来在一定概率下查找全局最优解 找的过程和固体退火原理有所联系,一般来讲 ...

  3. PHP程序执行流程

    1, PHP文件一定放在服务器的,但是PHP中不同的内容会在不同的地方执行.下图演示了浏览器请求一个php页面的流程. 2,时序图如下所示,在浏览器中输入url后,首先去本机hosts文件中解析ip地 ...

  4. redis 3.0 集群__安装

    参考文档 http://redis.io/topics/cluster-tutorial http://redis.io/topics/cluster-spec http://redis.readth ...

  5. 前端-chromeF12 谷歌开发者工具详解 Network篇

    开发者工具初步介绍 chrome开发者工具最常用的四个功能模块: Elements:主要用来查看前面界面的html的Dom结构,和修改css的样式.css可以即时修改,即使显示.大大方便了开发者调试页 ...

  6. [译文]casperjs使用说明-选择器

    casperjs的选择器可以在dom下工作,他既支持css也支持xpath. 下面所有的例子都基于这段html代码: <!doctype html> <html> <he ...

  7. [转](译)KVO的内部实现

    转载自:http://www.cocoachina.com/applenews/devnews/2014/0107/7667.html   09年的一篇文章,比较深入地阐述了KVO的内部实现.   K ...

  8. java面向对象概念1

    一.java面向对象学习的三条主线: 1.java类及类的成员:属性.方法.构造器:代码块.内部类 2.面向对象的三大特征:封装性.继承性.多态性.(抽象性) 3.其它关键字:this.super.s ...

  9. Centos 7.6 安装selenium+firefox+google chrome(支持xshell运行)

    1. 查看Linux 版本 [root@penguin selenium]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) ...

  10. SQL语句之用户管理

    SQL语句系列 1.SQL语句之行操作 2.SQL语句之表操作 3.SQL语句之数据库操作 4.SQL语句之用户管理 占坑,待写……