zoukankan      html  css  js  c++  java
  • golang学习之文件上传

    首先是上传页面upload.html:

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Upload</title>
    </head>
    <body>
    <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>
    </body>
    </html>

    文件上传代码:

    package main
    
    import (
        "html/template"
        "io"
        "log"
        "net/http"
        "os"
    )
    
    const (
        UPLOAD_DIR = "./uploads"
    )
    
    func uploadHandler(w http.ResponseWriter, r *http.Request) {
        if r.Method == "GET" {
            t, err := template.ParseFiles("upload.html")
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
            t.Execute(w, nil)
            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 {
                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 main() {
        http.HandleFunc("/view", viewHandler)
        http.HandleFunc("/upload", uploadHandler)
        err := http.ListenAndServe(":8080", nil)
        if err != nil {
            log.Fatal("ListenAndServe: ", err.Error())
        }
    }
  • 相关阅读:
    大数运算(涉及到格式问题)
    UltraEdit
    汉化eclipse3.6.2
    安装Microsoft SQL Server Management Studio Express是报错29506
    Java相对路径/绝对路径
    恢复Unbuntu的启动项
    UNC路径
    make: g++:命令未找到
    找到个学习html的网站
    HDU 3756 三分
  • 原文地址:https://www.cnblogs.com/vipzhou/p/5542161.html
Copyright © 2011-2022 走看看