首頁 > 後端開發 > Golang > 主體

透過 FTP 下載檔案後將檔案寫入磁碟時出現問題

PHPz
發布: 2024-02-08 22:30:21
轉載
595 人瀏覽過

通过 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!