• 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())
        }
    }
  • 相关阅读:
    iphone 低版本渲染不出来内容的一种解决办法
    win10 安装flutter记录
    ElasticSearch操作实例大全---文档结构操作(2)
    .net 实现word、excel、ppt、pdf预览功能
    layer插件弹出显示圆角
    ElasticSearch操作实例大全---文档结构操作(1)
    uploadify实战操作(一)
    mcDropdown使用方法
    用datatable 读写xml 及追加数据到xml
    百度分享
  • 原文地址:https://www.cnblogs.com/vipzhou/p/5542161.html
Copyright © 2020-2023  润新知