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中文網其他相關文章!