@@ -7,7 +7,7 @@ package migrations
7
7
import (
8
8
"crypto/md5"
9
9
"fmt"
10
- "io"
10
+ "io/ioutil "
11
11
"os"
12
12
"path/filepath"
13
13
@@ -46,7 +46,7 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
46
46
47
47
for _ , user := range users {
48
48
oldAvatar := user .Avatar
49
- newAvatar := fmt . Sprintf ( "%x" , md5 . Sum ([] byte ( fmt . Sprintf ( "%d-%s" , user . ID , user . Avatar ))))
49
+
50
50
if _ , err := os .Stat (filepath .Join (setting .AvatarUploadPath , oldAvatar )); err != nil {
51
51
log .Warn ("[user: %s] os.Stat: %v" , user .LowerName , err )
52
52
// avatar doesn't exist in the storage
@@ -55,7 +55,8 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
55
55
continue
56
56
}
57
57
58
- if err := copyAvatar (oldAvatar , newAvatar ); err != nil {
58
+ newAvatar , err := copyOldAvatarToNewLocation (user .ID , oldAvatar )
59
+ if err != nil {
59
60
_ = sess .Rollback ()
60
61
return fmt .Errorf ("[user: %s] %v" , user .LowerName , err )
61
62
}
@@ -82,21 +83,25 @@ func renameExistingUserAvatarName(x *xorm.Engine) error {
82
83
return nil
83
84
}
84
85
85
- func copyAvatar (oldAvatar , newAvatar string ) error {
86
+ // copyOldAvatarToNewLocation copies oldAvatar to newAvatarLocation
87
+ // and returns newAvatar location
88
+ func copyOldAvatarToNewLocation (userID int64 , oldAvatar string ) (string , error ) {
86
89
fr , err := os .Open (filepath .Join (setting .AvatarUploadPath , oldAvatar ))
87
90
if err != nil {
88
- return fmt .Errorf ("os.Open: %v" , err )
91
+ return "" , fmt .Errorf ("os.Open: %v" , err )
89
92
}
90
93
defer fr .Close ()
91
94
92
- fw , err := os . Create ( filepath . Join ( setting . AvatarUploadPath , newAvatar ) )
95
+ data , err := ioutil . ReadAll ( fr )
93
96
if err != nil {
94
- return fmt .Errorf ("os.Create : %v" , err )
97
+ return "" , fmt .Errorf ("ioutil.ReadAll : %v" , err )
95
98
}
96
- defer fw .Close ()
97
99
98
- if _ , err := io .Copy (fw , fr ); err != nil {
99
- return fmt .Errorf ("io.Copy: %v" , err )
100
+ newAvatar := fmt .Sprintf ("%x" , md5 .Sum ([]byte (fmt .Sprintf ("%d-%x" , userID , md5 .Sum (data )))))
101
+
102
+ if err := ioutil .WriteFile (filepath .Join (setting .AvatarUploadPath , newAvatar ), data , 0666 ); err != nil {
103
+ return "" , fmt .Errorf ("ioutil.WriteFile: %v" , err )
100
104
}
101
- return nil
105
+
106
+ return newAvatar , nil
102
107
}
0 commit comments