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

Golang实现文件传输功能

2024-04-02 19:04:59 209人浏览 薄情痞子
摘要

本文实例为大家分享了golang实现文件传输的具体代码,供大家参考,具体内容如下 借助tcp完成文件的传输,基本思路如下: 1、发送方(客户端)向服务端发送文件名,服务端保存该文件名

本文实例为大家分享了golang实现文件传输的具体代码,供大家参考,具体内容如下

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

1、发送方(客户端)向服务端发送文件名,服务端保存该文件名。
2、接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功。
3、发送方(客户端)收到消息后,开始向服务端发送文件数据。
4、接收方(服务端)读取文件内容,写入到之前保存好的文件中。

首先获取文件名。借助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)
}

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

您可能感兴趣的文档:

--结束END--

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

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

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

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

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

下载Word文档
猜你喜欢
  • Golang实现文件传输功能
    本文实例为大家分享了Golang实现文件传输的具体代码,供大家参考,具体内容如下 借助TCP完成文件的传输,基本思路如下: 1、发送方(客户端)向服务端发送文件名,服务端保存该文件名...
    99+
    2022-11-11
  • Golang如何实现文件传输功能
    今天小编给大家分享一下Golang如何实现文件传输功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。借助TCP完成文件的传输...
    99+
    2023-07-05
  • golang怎么实现大文件传输功能
    在Go语言中,可以使用`io.Copy()`函数来实现大文件传输功能。`io.Copy()`函数会从源文件(例如,一个`io.Rea...
    99+
    2023-10-27
    golang
  • golang如何实现大文件传输
    在 Golang 中,可以使用 io 和 os 包来实现大文件的传输。以下是一种可能的实现方式: 首先,需要创建一个服务器端和一个客...
    99+
    2023-10-21
    golang
  • python利用socket实现udp文件传输功能
    本文实例为大家分享了UDP实现文件传输的具体代码,供大家参考,具体内容如下 tcp进行文件传输看这里–python实现TCP文件接发 这里实现的接收方一直接收,发送方每次发送一个文件...
    99+
    2022-11-12
  • Golang实现http文件上传小功能的案例
    看代码吧~ package main import ( "fmt" "io" "net/http" "os" ) func main() { http.HandleFu...
    99+
    2022-11-12
  • golang Websocket教程:如何开发在线文件传输功能
    Golang Websocket教程:如何开发在线文件传输功能引言:随着互联网的快速发展,文件传输成了人们在网络上常常面临的需求。而利用Websocket技术,我们可以轻松地实现在线文件传输功能。本文将介绍如何使用Golang开发一个基于W...
    99+
    2023-12-17
    Golang websocket 文件传输
  • golang实现文件上传并转存数据库功能
    本文实例为大家分享了golang实现文件上传并转存数据库的具体代码,供大家参考,具体内容如下 需求 上传图片,且可选择将图片保存到数据中。 一、流程图 二、步骤 1.上传文件接口 ...
    99+
    2022-11-11
  • 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
  • springmvc实现文件上传功能
    一个简单的springmvc文件上传例子 所需的依赖 只需要这个就好了。在idea的依赖关系图中,commons-fileupload包含了commons-io依赖 <d...
    99+
    2022-11-11
  • ASP.NET实现文件上传功能
    本文实例为大家分享了ASP.NET实现文件上传功能的具体代码,供大家参考,具体内容如下 1、搭建网站结构 2、编写网页文件 创建一个Web窗体UploadFile和UpFile文件...
    99+
    2022-11-13
  • SpringBoot实现文件上传功能
    经典的文件上传 服务器处理上传文件一般都是先在请求中读取文件信息,然后改变名称保存在服务器的临时路径下,最后保存到服务器磁盘中。本次以thymeleaf搭建demo,因此需要引入th...
    99+
    2022-11-12
  • JSP实现文件上传功能
    本文实例为大家分享了JSP实现文件上传功能的具体代码,供大家参考,具体内容如下 一、准备部分 需要fileupload.jar与io.jar包共同完成。构建完成路径后可继续。 资源地...
    99+
    2022-11-12
  • javaweb实现文件上传功能
    本文实例为大家分享了javaweb实现文件上传的具体代码,供大家参考,具体内容如下 1、创建一个空项目 2、新建一个web application 的Module 3、创建一个lib...
    99+
    2022-11-13
  • JavaWeb实现上传文件功能
    本文实例为大家分享了JavaWeb实现上传文件的具体代码,供大家参考,具体内容如下 这是需要使用到的两个jar包一定要导入到lib目录中,并添加到发布的lib目录下 index.j...
    99+
    2022-11-13
  • ajaxfileupload.js实现上传文件功能
    下面是一个使用ajaxfileupload.js实现文件上传功能的示例代码:首先,你需要引入ajaxfileupload.js文件,...
    99+
    2023-08-11
    功能
  • android Socket实现简单聊天功能以及文件传输
    干程序是一件枯燥重复的事,每当感到内心浮躁的时候,我就会找小说来看。我从小就喜爱看武侠小说,一直有着武侠梦。从金庸,古龙,梁羽生系列到凤歌(昆仑),孙晓(英雄志)以及萧鼎的(诛...
    99+
    2022-06-06
    socket Android
  • 如何使用 Python 和 Spring Boot 实现文件传输功能?
    文件传输是现代应用程序中常见的需求之一。Python 和 Spring Boot 是两种非常流行的编程语言,它们都提供了丰富的工具和库,可以轻松地实现文件传输功能。在本文中,我们将探讨如何使用 Python 和 Spring Boot 实...
    99+
    2023-09-04
    文件 关键字 spring
  • Golang+Android基于HttpURLConnection实现的文件上传功能示例
    本文实例讲述了Golang+Android基于HttpURLConnection实现的文件上传功能。分享给大家供大家参考,具体如下: 这里要演示的是使用Android程序作为客...
    99+
    2022-06-06
    示例 文件上传 golang Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作