首页 >后端开发 >Golang >通过 FTP 下载文件后将文件写入磁盘时出现问题

通过 FTP 下载文件后将文件写入磁盘时出现问题

PHPz
PHPz转载
2024-02-08 22:30:21642浏览

通过 FTP 下载文件后将文件写入磁盘时出现问题

php小编新一,有时在通过FTP下载文件并将其写入磁盘时,可能会遇到一些问题。这可能是由于网络连接问题、权限设置不正确或磁盘空间不足等原因造成的。在这种情况下,我们需要仔细检查并解决这些问题,以确保文件能够成功下载并写入磁盘。在本文中,我们将探讨一些可能的解决方案和常见错误,并提供一些有用的技巧来解决这些问题。无论您是刚开始使用FTP还是对其已经很熟悉,这些信息都将对您有所帮助。

问题内容

写入磁盘的文件是空的,但读取器不是空的。 我不明白问题出在哪里。 我尝试使用 Buffer 然后使用 String() 方法,我可以确认内容没问题,但是使用该库的 Read() 方法不起作用。

我使用的库是github.com/jlaffaye/ftp

// pullFileByFTP
func pullFileByFTP(fileID, server string, port int64, username, password, path, file string) error {
    // Connect to the server
    client, err := ftp.Dial(fmt.Sprintf("%s:%d", server, port))
    if err != nil {
        return err
    }

    // Log in the server
    err = client.Login(username, password)
    if err != nil {
        return err
    }

    // Retrieve the file
    reader, err := client.Retr(fmt.Sprintf("%s%s", path, file))
    if err != nil {
        return err
    }

    // Read the file
    var srcFile []byte
    _, err = reader.Read(srcFile)
    if err != nil {
        return err
    }

    // Create the destination file
    dstFile, err := os.Create(fmt.Sprintf("%s/%s", shared.TmpDir, fileID))
    if err != nil {
        return fmt.Errorf("Error while creating the destination file : %s", err)
    }
    defer dstFile.Close()

    // Copy the file
    dstFile.Write(srcFile)

    return nil
}

解决方法

您正在使用 阅读错误:

var srcFile []byte
_, err = reader.Read(srcFile)

Read 将读取的字节放入其参数中。由于 srcFile 是一个 nil 切片,因此这指示读取器读取零字节。使用 ioutil.ReadAll 读取所有字节。

接下来是 Write 的使用。 Write(b) 最多写入 len(b) 个字节,但不一定是全部。您必须检查返回值,并在必要时重复调用 Write。

但是,在您的情况下,您只想连接 io.Reader (*Response 实现 io.Reader)和 io.Writer (*os.File)。这就是 io.Copy 的用途:

reader, err := client.Retr(path + file)
dstFile, err := ioutil.TempFile("", fileID)

_, err := io.Copy(dstFile, reader)
err := dstFile.Close()

以上是通过 FTP 下载文件后将文件写入磁盘时出现问题的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除