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

PHPz
Freigeben: 2024-02-08 22:30:21
nach vorne
596 Leute haben es durchsucht

通过 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
}
Nach dem Login kopieren

Lösung

Sie verwenden Lesen und SchreibenFehler:

var srcFile []byte
_, err = reader.Read(srcFile)
Nach dem Login kopieren

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()
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!