Heim  >  Artikel  >  Backend-Entwicklung  >  Problem beim Schreiben der Datei auf die Festplatte nach dem Herunterladen per FTP

Problem beim Schreiben der Datei auf die Festplatte nach dem Herunterladen per FTP

PHPz
PHPznach vorne
2024-02-08 22:30:21597Durchsuche

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

php-Editor Xinyi, manchmal können beim Herunterladen von Dateien über FTP und beim Schreiben auf die Festplatte Probleme auftreten. Dies kann auf Netzwerkverbindungsprobleme, falsche Berechtigungseinstellungen oder unzureichenden Speicherplatz zurückzuführen sein. In diesem Fall müssen wir diese Probleme sorgfältig prüfen und beheben, um sicherzustellen, dass die Datei erfolgreich heruntergeladen und auf die Festplatte geschrieben werden kann. In diesem Artikel untersuchen wir einige mögliche Lösungen und häufige Fehler und geben einige hilfreiche Tipps zu deren Behebung. Ganz gleich, ob Sie FTP noch nicht kennen oder bereits damit vertraut sind, diese Informationen werden für Sie hilfreich sein.

Frageninhalt

Die auf die Festplatte geschriebene Datei ist leer, aber der Reader ist nicht leer. Ich verstehe nicht, was das Problem ist. Ich habe es mit der Buffer 然后使用 String() 方法,我可以确认内容没问题,但是使用该库的 Read()-Methode versucht, die jedoch nicht funktioniert hat.

Die Bibliothek, die ich verwende, ist 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
}

Lösung

Sie verwenden Lesen und SchreibenFehler:

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

Read fügt die gelesenen Bytes in sein Argument ein. Da srcFile ein Null-Slice ist, weist dies den Leser an, null Bytes zu lesen. Verwenden Sie ioutil.ReadAll, um alle Bytes zu lesen.

Der nächste Schritt ist die Verwendung von Write. Write(b) Schreiben Sie höchstens len(b) Bytes, aber nicht unbedingt alle. Sie müssen den Rückgabewert überprüfen und ggf. wiederholt Write aufrufen.

In Ihrem Fall möchten Sie jedoch nur io.Reader (*Response implementiert io.Reader) und io.Writer (*os.File) verbinden. Dafür ist io.Copy da:

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

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

Das obige ist der detaillierte Inhalt vonProblem beim Schreiben der Datei auf die Festplatte nach dem Herunterladen per FTP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen