广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang如何实现文件传输功能
  • 536
分享到

Golang如何实现文件传输功能

2023-07-05 18:07:22 536人浏览 独家记忆
摘要

今天小编给大家分享一下golang如何实现文件传输功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。借助tcp完成文件的传输

今天小编给大家分享一下golang如何实现文件传输功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

借助tcp完成文件的传输,基本思路如下:

发送方(客户端)向服务端发送文件名,服务端保存该文件名。

接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功。

发送方(客户端)收到消息后,开始向服务端发送文件数据。

接收方(服务端)读取文件内容,写入到之前保存好的文件中。

Golang如何实现文件传输功能Golang如何实现文件传输功能

首先获取文件名。借助os包中的stat()函数来获取文件属性信息。在函数返回的文件属性中包含文件名和文件大小。Stat参数name传入的是文件访问的绝对路径。FileInfo中的Name()函数可以将文件名单独提取出来。

func Stat(name string) (FileInfo, error) 
type FileInfo interface {
  Name() string      
  Size() int64        
  Mode() FileMode    
  ModTime() time.Time
  IsDir() bool        
  Sys() interface{}  
}

发送端:

package main

import (
   "fmt"
   "io"
   "net"
   "os"
)

func sendFile(conn net.Conn, filePath string) {
   // 只读打开文件
   f, err := os.Open(filePath)
   if err != nil {
       fmt.Println("os.Open err:", err)
       return
   }
   defer f.Close()

   // 从本文件中,读数据,写给网络接收端。 读多少,写多少。原封不动。
   buf := make([]byte, 1024)
   for {
       n, err := f.Read(buf)
       if err != nil {
           if err == io.EOF {
               fmt.Println("发送文件完成。")
           } else {
               fmt.Println("os.Open err:", err)
           }
           return
       }
       // 写到网络Socket
       _, err = conn.Write(buf[:n])
       if err != nil {
           fmt.Println("conn.Write err:", err)
           return
       }
   }
}

func main() {
   list := os.Args // 获取命令行参数

   if len(list) != 2 {
       fmt.Println("格式为:Go run xxx.go 文件绝对路径")
       return
   }
   // 提取 文件的绝对路径
   filePath := list[1]

   //提取文件名
   fileInfo, err := os.Stat(filePath)
   if err != nil {
       fmt.Println("os.Stat err:", err)
       return
   }
   fileName := fileInfo.Name()

   // 主动发起连接请求
   conn, err := net.Dial("tcp", "127.0.0.1:8000")
   if err != nil {
       fmt.Println("net.Dial err:", err)
       return
   }
   defer conn.Close()

   // 发送文件名给 接收端
   _, err = conn.Write([]byte(fileName))
   if err != nil {
       fmt.Println("conn.Write err:", err)
       return
   }
   // 读取服务器回发的 OK
   buf := make([]byte, 1024)
   n, err := conn.Read(buf)
   if err != nil {
       fmt.Println("conn.Read err:", err)
       return
   }

   if "ok" == string(buf[:n]) {
       // 写文件内容给服务器——借助conn
       sendFile(conn, filePath)
   }
}

接收端:

package main

import (
   "fmt"
   "net"
   "os"
)

func recvFile(conn net.Conn, fileName string) {
   // 按照文件名创建新文件
   f, err := os.Create(fileName)
   if err != nil {
       fmt.Println("os.Create err:", err)
       return
   }
   defer f.Close()

   // 从 网络中读数据,写入本地文件
   buf := make([]byte, 1024)
   for {
       n, _ := conn.Read(buf)
       if n == 0 {
           fmt.Println("接收文件完成。")
           return
       }
       // 写入本地文件,读多少,写多少。
       f.Write(buf[:n])
   }
}

func main() {
   // 创建用于监听的socket
   listener, err := net.Listen("tcp", "127.0.0.1:8000")
   if err != nil {
       fmt.Println(" net.Listen err:", err)
       return
   }
   defer listener.Close()

   fmt.Println("接收端启动成功,等待发送端发送文件!")

   // 阻塞监听
   conn, err := listener.Accept()
   if err != nil {
       fmt.Println(" listener.Accept() err:", err)
       return
   }
   defer conn.Close()

   // 获取文件名,保存
   buf := make([]byte, 1024)
   n, err := conn.Read(buf)
   if err != nil {
       fmt.Println(" conn.Read err:", err)
       return
   }
   fileName := string(buf[:n])

   // 回写 ok 给发送端
   conn.Write([]byte("ok"))

   // 获取文件内容
   recvFile(conn, fileName)
}

以上就是“Golang如何实现文件传输功能”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网GO频道。

您可能感兴趣的文档:

--结束END--

本文标题: Golang如何实现文件传输功能

本文链接: https://www.lsjlt.com/news/354352.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang如何实现文件传输功能
    今天小编给大家分享一下Golang如何实现文件传输功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。借助TCP完成文件的传输...
    99+
    2023-07-05
  • Golang实现文件传输功能
    本文实例为大家分享了Golang实现文件传输的具体代码,供大家参考,具体内容如下 借助TCP完成文件的传输,基本思路如下: 1、发送方(客户端)向服务端发送文件名,服务端保存该文件名...
    99+
    2022-11-11
  • golang怎么实现大文件传输功能
    在Go语言中,可以使用`io.Copy()`函数来实现大文件传输功能。`io.Copy()`函数会从源文件(例如,一个`io.Rea...
    99+
    2023-10-27
    golang
  • golang如何实现大文件传输
    在 Golang 中,可以使用 io 和 os 包来实现大文件的传输。以下是一种可能的实现方式: 首先,需要创建一个服务器端和一个客...
    99+
    2023-10-21
    golang
  • golang Websocket教程:如何开发在线文件传输功能
    Golang Websocket教程:如何开发在线文件传输功能引言:随着互联网的快速发展,文件传输成了人们在网络上常常面临的需求。而利用Websocket技术,我们可以轻松地实现在线文件传输功能。本文将介绍如何使用Golang开发一个基于W...
    99+
    2023-12-17
    Golang websocket 文件传输
  • python利用socket实现udp文件传输功能
    本文实例为大家分享了UDP实现文件传输的具体代码,供大家参考,具体内容如下 tcp进行文件传输看这里–python实现TCP文件接发 这里实现的接收方一直接收,发送方每次发送一个文件...
    99+
    2022-11-12
  • 如何使用 Python 和 Spring Boot 实现文件传输功能?
    文件传输是现代应用程序中常见的需求之一。Python 和 Spring Boot 是两种非常流行的编程语言,它们都提供了丰富的工具和库,可以轻松地实现文件传输功能。在本文中,我们将探讨如何使用 Python 和 Spring Boot 实...
    99+
    2023-09-04
    文件 关键字 spring
  • Golang实现http文件上传小功能的案例
    看代码吧~ package main import ( "fmt" "io" "net/http" "os" ) func main() { http.HandleFu...
    99+
    2022-11-12
  • golang实现文件上传并转存数据库功能
    本文实例为大家分享了golang实现文件上传并转存数据库的具体代码,供大家参考,具体内容如下 需求 上传图片,且可选择将图片保存到数据中。 一、流程图 二、步骤 1.上传文件接口 ...
    99+
    2022-11-11
  • 如何实现js上传文件功能
    这篇文章给大家分享的是有关如何实现js上传文件功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下一、用input完成上传,效果图如   ...
    99+
    2022-10-19
  • JavaWeb如何实现上传文件功能
    本篇内容主要讲解“JavaWeb如何实现上传文件功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaWeb如何实现上传文件功能”吧!这是需要使用到的两个jar包一定要导入到lib目录中,并...
    99+
    2023-07-02
  • Netty如何实现文件上传功能
    这篇文章主要讲解了“Netty如何实现文件上传功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Netty如何实现文件上传功能”吧!今天我们来完成一个使用netty进行文件传输的任务。在实际...
    99+
    2023-06-20
  • SpringBoot如何实现文件上传功能
    这篇文章主要介绍了SpringBoot如何实现文件上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。经典的文件上传服务器处理上传文件一般都是先在请求中读取文件信息,然后改...
    99+
    2023-06-25
  • Golang如何实现图片上传功能
    今天小编给大家分享一下Golang如何实现图片上传功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.前端代码html代码...
    99+
    2023-06-30
  • golang gin框架实现大文件的流式上传功能
    目录upload.htmlgin_stream_upload_file.go一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存。如果是个巨...
    99+
    2022-11-13
  • golang实现大文件传输的方法是什么
    在Golang中实现大文件传输可以使用以下方法之一:1. 使用基于TCP的传输:可以使用net或net/http包来实现基于TCP的...
    99+
    2023-10-20
    golang
  • Java如何实现多文件上传功能
    这篇文章主要为大家展示了“Java如何实现多文件上传功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java如何实现多文件上传功能”这篇文章吧。文件上传是开发中十分常见的功能,在servlet...
    99+
    2023-06-20
  • ajaxFileupload如何实现多文件上传功能
    这篇文章将为大家详细讲解有关ajaxFileupload如何实现多文件上传功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。打开google 搜索"ajaxFi...
    99+
    2022-10-19
  • thinkphp中如何实现文件上传功能
    这篇文章主要介绍“thinkphp中如何实现文件上传功能”,在日常操作中,相信很多人在thinkphp中如何实现文件上传功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”thinkphp中如何实现文件上传功能...
    99+
    2023-07-05
  • Flex上传文件功能该如何实现
    这期内容当中小编将会给大家带来有关Flex上传文件功能该如何实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。写过很多文件上传的功能,包括AJAX实现动态监控上传进度的,现在看到了实现Flex文件上传功能...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作