Éditeur php Xinyi, vous pouvez parfois rencontrer des problèmes lors du téléchargement de fichiers via FTP et de leur écriture sur le disque. Cela peut être dû à des problèmes de connexion réseau, à des paramètres d'autorisation incorrects ou à un espace disque insuffisant. Dans ce cas, nous devons soigneusement vérifier et résoudre ces problèmes pour garantir que le fichier peut être téléchargé et écrit avec succès sur le disque. Dans cet article, nous explorerons quelques solutions possibles et erreurs courantes, et fournirons quelques conseils utiles pour les corriger. Que vous soyez nouveau dans l'utilisation de FTP ou que vous le connaissiez déjà, ces informations vous seront utiles.
Le fichier écrit sur le disque est vide, mais le lecteur n'est pas vide.
Je ne comprends pas quel est le problème.
J'ai essayé d'utiliser la méthode Buffer
然后使用 String()
方法,我可以确认内容没问题,但是使用该库的 Read()
qui n'a pas fonctionné.
La bibliothèque que j'utilise est 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 }
Vous utilisez Read et WriteErreur :
var srcFile []byte _, err = reader.Read(srcFile)
Read met les octets lus dans son argument. Puisque srcFile est une tranche nulle, cela demande au lecteur de lire zéro octet. Utilisez ioutil.ReadAll pour lire tous les octets.
La prochaine étape est l'utilisation de Write. Write(b)
Écrivez au plus len(b) octets, mais pas nécessairement tous. Vous devez vérifier la valeur de retour et appeler Write à plusieurs reprises si nécessaire.
Cependant, dans votre cas, vous souhaitez uniquement connecter io.Reader (*Response implémente io.Reader) et io.Writer (*os.File). Voilà à quoi sert io.Copy :
reader, err := client.Retr(path + file) dstFile, err := ioutil.TempFile("", fileID) _, err := io.Copy(dstFile, reader) err := dstFile.Close()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!