@@ -96,35 +96,42 @@ func (uploader *FtpUploader) createDirectoryIfNotExists(conn *ftp.ServerConn, up
9696 directories := strings .Split (uploadFilePathDir , "/" )
9797
9898 for i := range directories {
99- uploader .directoriesMutex .Lock ()
100- defer uploader .directoriesMutex .Unlock ()
99+ createDirFunc := func () error {
100+ uploader .directoriesMutex .Lock ()
101+ defer uploader .directoriesMutex .Unlock ()
101102
102- remoteDir := filepath .Join (directories [:i + 1 ]... )
103- if uploader .PreCreatedDirectories [remoteDir ] {
104- continue
105- }
103+ remoteDir := filepath .Join (directories [:i + 1 ]... )
104+ if uploader .PreCreatedDirectories [remoteDir ] {
105+ return nil
106+ }
106107
107- err := conn .MakeDir (remoteDir )
108- if err != nil {
109- currentDir , err := conn .CurrentDir ()
108+ err := conn .MakeDir (remoteDir )
110109 if err != nil {
111- return fmt .Errorf ("could not get current directory: %w" , err )
112- }
110+ currentDir , err := conn .CurrentDir ()
111+ if err != nil {
112+ return fmt .Errorf ("could not get current directory: %w" , err )
113+ }
113114
114- err = conn .ChangeDir (remoteDir )
115+ err = conn .ChangeDir (remoteDir )
115116
116- if err != nil {
117- return fmt .Errorf ("failed to create ftp directory: %w" , err )
118- }
117+ if err != nil {
118+ return fmt .Errorf ("failed to create ftp directory: %w" , err )
119+ }
119120
120- err = conn .ChangeDir (currentDir )
121- if err != nil {
122- return fmt .Errorf ("failed to reset directory: %w" , err )
123- }
124- }
121+ err = conn .ChangeDir (currentDir )
122+ if err != nil {
123+ return fmt .Errorf ("failed to reset directory: %w" , err )
124+ }
125125
126- uploader .PreCreatedDirectories [remoteDir ] = true
126+ uploader .PreCreatedDirectories [remoteDir ] = true
127127
128+ }
129+ return nil
130+ }
131+ err := createDirFunc ()
132+ if err != nil {
133+ return err
134+ }
128135 }
129136 return nil
130137}
0 commit comments