Golang实现http文件上传小功能的案例

看代码吧~

package main
import (
	"fmt"
	"io"
	"net/http"
	"os"
)
func main() {
	http.HandleFunc("/", index)
	http.HandleFunc("/upload", upload)
	http.ListenAndServe(":1789", nil)
}
func upload(w http.ResponseWriter, r *http.Request) {
	r.ParseMultipartForm(32 << 20)
	file, handler, err := r.FormFile("uploadfile")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()
	f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer f.Close()
	io.Copy(f, file)
	fmt.Fprintln(w, "upload ok!")
}
func index(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte(tpl))
}
const tpl = `<html>
<head>
<title>上传文件</title>
</head>
<body>
<form enctype="multipart/form-data" action="/upload" method="post">
 <input type="file" name="uploadfile" />
 <input type="hidden" name="token" value="{...{.}...}"/>
 <input type="submit" value="upload" />
</form>
</body>
</html>`

补充:Golang 调用http 文件上传接口 进行上传文件

远程服务器有一个文件上传接口,文件用于保存到服务器本地,用go如何调用此接口将文件上传至服务器?

首先,文件上传请求方 与 接收方 要协调工作(解析等工作)

接收方:

func UploadFileToLocal(c echo.Context) error {
 r := c.Request()  //无论用的什么路由,原理是要从request获取数据
 t := echotools.NewEchoTools(c)
 reader, err := r.MultipartReader() //request 获得文件 reader
 if err != nil {
  return t.BadRequest(err.Error())
 }
 if reader == nil {
  return t.BadRequest(`未接受到文件`)
 }
    //遍历操作 获得的
 for {
  part, err := reader.NextPart()
  if err == io.EOF {
   break
  }
  fmt.Printf("FileName=[%s],FormName[%s]\n",part.FileName(),part.FormName())
  if part.FileName() == "" {
   data, _ := ioutil.ReadAll(part)
   fmt.Printf("FormData=[%s]\n", string(data))
            continue
  } else {
            //创建一个空文件
   dst, er:= os.Create("static/uploadfiles/" + part.FileName())
   if er != nil {
    return t.BadRequest(err.Error())
   }
   defer dst.Close()
            //将获取到的文件复制 给 创建的文件
   _,err := io.Copy(dst, part)
   if err != nil {
    return t.BadRequest(err.Error())
   }
  }
 }
  return t.OK(`OK`)
}

请求方:

func SendFile(c echo.Context) error{
 t := echotools.NewEchoTools(c)
 r := c.Request()
 file, header, err := r.FormFile("file") // 获得客户端传来的 文件 file
 if err != nil {
  return t.BadRequest("上传错误:" + err.Error())
 }

 bodyBuffer := &bytes.Buffer{}
 bodyWriter := multipart.NewWriter(bodyBuffer)
 fileWriter, _ := bodyWriter.CreateFormFile("files", header.Filename)
 io.Copy(fileWriter, file) //将 客户端文件 复制给 用于传输的 fileWriter
 contentType := bodyWriter.FormDataContentType() //contentType
 bodyWriter.Close()
 ip := config.Opts.UploadServerAddr //配置
 resp, _ := http.Post("http://"+ip+"/uploadToLocal/"+header.Filename, contentType, bodyBuffer)
 defer resp.Body.Close()
 resp_body, _ := ioutil.ReadAll(resp.Body)

 if resp.Status == `200 OK` {
  return t.OK(string(resp_body))
 }else {
  return t.BadRequest(string(resp_body))
 }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • golang语言实现的文件上传与文件下载功能示例

    本文实例讲述了golang实现的文件上传与文件下载功能.分享给大家供大家参考,具体如下: upload.go 复制代码 代码如下: package common import (  "io/ioutil"  "os"  "path"  "github.com/gin-gonic/gin"  "googo.co/goo"  "googo.co/utils" ) const (  UPLOA

  • golang实现的文件上传下载小工具

    前言 虽然现在文件上传下载工具多如牛毛,比如http.ftp.sftp.scp等方案都可以用于文件传输,但都是需要安装服务器甚至客户端. 有一种场景是我只需要临时上传或下载一个文件,完了就不用服务器运行了,如果使用那些文件传输工具,不光安装麻烦,开启关闭也恼火额. 因此才想搞小工具,不过Python爱好者可以用python -m http.server 8080 --bind 192.168.1.100开启文件服务器,对我来说还是麻烦. 已经上传到[Github],随意鉴赏. 源码鉴赏 模拟一个

  • Golang实现异步上传文件支持进度条查询的方法

    业务背景 业务需求要求开发一个异步上传文件的接口,并支持上传进度的查询. 需求分析 ZIP压缩包中,包含一个csv文件和一个图片文件夹,要求:解析csv数据存入mongo,将图片文件夹中的图片信息对应上csv中的人员信息. ZIP压缩包解压 使用golang自带的 "archive/zip" 包解压. func decompressZip(filePath, dest string) (string, string, error) { var csvName string imageF

  • golang简单获取上传文件大小的实现代码

    本文实例讲述了golang简单获取上传文件大小的方法.分享给大家供大家参考,具体如下: 复制代码 代码如下: package main import (     "fmt"     "io"     "net/http"     "log"     "os" ) // 获取文件大小的接口 type Size interface {     Size() int64 } // 获取文件信息的接口 type S

  • Golang+Android基于HttpURLConnection实现的文件上传功能示例

    本文实例讲述了Golang+Android基于HttpURLConnection实现的文件上传功能.分享给大家供大家参考,具体如下: 这里要演示的是使用Android程序作为客户端(使用HttpURLConnection访问网络),Golang程序作为服务器端,实现文件上传. 客户端代码: public static String uploadFile(String uploadUrl, String filePath) { Log.v(TAG, "url:" + uploadUrl)

  • Golang实现http文件上传小功能的案例

    看代码吧~ package main import ( "fmt" "io" "net/http" "os" ) func main() { http.HandleFunc("/", index) http.HandleFunc("/upload", upload) http.ListenAndServe(":1789", nil) } func upload(w h

  • 表单正则验证及文件上传验证功能

    表单正则验证主要是用来对表单提交信息的过滤,防止sql注入(比如登录界面),上传的文件也需要进行文件名后缀和大小进行验证,下面是一个简单的表单验证 header("Content-type:text/html;charset=utf-8"); $user = isset($_POST['user'])?$_POST['user']:null; $password = isset($_POST['password'])?$_POST['password']:null; $arr = ar

  • SpringBoot实现文件上传下载功能小结

    最近做的一个项目涉及到文件上传与下载.前端上传采用百度webUploader插件.有关该插件的使用方法还在研究中,日后整理再记录.本文主要介绍SpringBoot后台对文件上传与下载的处理. 单文件上传 // 单文件上传 @RequestMapping(value = "/upload") @ResponseBody public String upload(@RequestParam("file") MultipartFile file) { try { if (

  • FasfDFS整合Java实现文件上传下载功能实例详解

    在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</arti

  • Struts2 控制文件上传下载功能实例代码

    之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Struts贯彻AOP 思想,在下载之前提供对用户权限控制的API. 下面我们将详细介绍上传和下载的相关内容. 一.Struts文件上传机制 想要实现文件上传功能,页面的表单的method属性必须被指定为post,还有enctype属性必须为multipart/form-data,该值表示上传的内容将会以二进

  • Spring Boot + thymeleaf 实现文件上传下载功能

    最近同事问我有没有有关于技术的电子书,我打开电脑上的小书库,但是邮件发给他太大了,公司又禁止用文件夹共享,于是花半天时间写了个小的文件上传程序,部署在自己的Linux机器上. 提供功能: 1 .文件上传 2.文件列表展示以及下载 原有的上传那块很丑,写了点js代码优化了下,最后界面显示如下图: 先给出成果,下面就一步步演示怎么实现. 1.新建项目 首先当然是新建一个spring-boot工程,你可以选择在网站初始化一个项目或者使用IDE的Spring Initialier功能,都可以新建一个项目

  • vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)

    vue-cli+axios实现附件上传下载记录: 上传: 这里用formData格式传递参数:请求成功后后台返回上传文件的对应信息. 重点是下载: ############## downloadfile(res) { var blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'}); //applicati

  • java中struts2实现文件上传下载功能实例解析

    本文实例讲述了java中struts2实现文件上传下载功能实现方法.分享给大家供大家参考.具体分析如下: 1.文件上传 首先是jsp页面的代码 在jsp页面中定义一个上传标签 复制代码 代码如下: <tr>      <td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>      <td bgcolor="#FFFFFF">

  • JavaEE中struts2实现文件上传下载功能实例解析

    本文实例为大家分享了struts2实现文件上传下载的具体实现代码,供大家参考,具体内容如下 一.文件上传 struts提交的文件组件上传, 前台: 1).提交方式POST 2).表单类型 multipart/form-data 3).input type=file 后台: Apache提供的FileUpload组件 核心类: FileItemFactory FileItem的工厂 ServletFileUpload servlet 中的文件上传的核心类 FileItem 封装了上传的表单文件项的

随机推荐