您现在的位置是:网站首页> 编程资料编程资料

GO语言原生实现文件上传功能_Golang_

2023-05-26 364人已围观

简介 GO语言原生实现文件上传功能_Golang_

本文实例为大家分享了GO原生实现文件上传功能的具体代码,供大家参考,具体内容如下

写在前面

最近在学习go,发现实践才是检验真理的唯一标准。在不引入任何框架的基础上,利用go语言实现一个web小应用也是比较方便的,但是坑还是不少,这里直接放上来,以防以后自己用得到,也希望可以帮到你。

首先写处理文件上传的handler

package handler /** 实现文件的上传和下载 */ import (     "fmt"     "io"     "io/ioutil"     "net/http"     "os" ) //文件上传(这里一定要注意,方法名首字母大写,否则无法在别的包中被引用发现) func UploadHandler(w http.ResponseWriter, r *http.Request) {     //这里的输出数字是为了等下等直观的感受程序运行的过程,后面输出的数字功能类似     fmt.Printf("4")     //首次访问指定url默认采用GET方法提交,所以需要调出提交文件表单页面     if r.Method == "GET" {         fmt.Printf("5")         //通过读取html文件再交由http.ResponseWriter输出的方式实现文件提交页面的唤出         data, err := ioutil.ReadFile("static/view/index.html")         if err != nil {             _, _ = io.WriteString(w, "something wrong!")             return         }         _, _ = io.WriteString(w, string(data))     } else if r.Method == "POST" {         fmt.Printf("6")         //将文件存储至本地         file, head, err := r.FormFile("file")         if err != nil {             fmt.Printf("Failed to get file data %s\n", err.Error())             return         }         defer file.Close()         //在本地创建一个新的文件去承载上传的文件         newFile, err := os.Create("/tmp/" + head.Filename)         if err != nil {             fmt.Printf("Failed to create newFile data %s\n", err.Error())             return         }         defer newFile.Close()         _, err = io.Copy(newFile, file)         if err != nil {             fmt.Printf("Failed to save into newFile %s\n", err.Error())             return         }         // 重定向到成功的页面逻辑         http.Redirect(w, r, "/file/upload/suc", http.StatusFound)     } } // 文件上传成功处理逻辑 func UploadSucHandler(w http.ResponseWriter, r *http.Request) {     _, _ = io.WriteString(w, "Upload Succeed!") }

其次完成main方法,注册路由信息

所谓的注册路由信息,其实就是类似于java框架中配置url拦截规则,具体见下:

package main import (     "log"     "net/http"     "zone/src/handler" ) func main() {     //设置http的路由规则,类似于Java框架中设置请求拦截规则     http.HandleFunc("/file/upload", handler.UploadHandler)     http.HandleFunc("/file/upload/suc", handler.UploadSucHandler)     //开启http监听     //err := http.ListenAndServe(":8080", nil)     //if err != nil {     //    fmt.Printf("There is an err %s", err.Error())     //}     //上面方法不太优雅,现在用log直接包裹监听     log.Fatal(http.ListenAndServe(":8081", nil)) }

最后完成前端文件提交页面

          上传文件
   

   

测试一下

程序后台执行情况:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

-六神源码网