@@ -13,6 +13,7 @@ import (
13
13
"strings"
14
14
"time"
15
15
16
+ "code.gitea.io/gitea/modules/log"
16
17
"github.com/minio/minio-go/v7"
17
18
"github.com/minio/minio-go/v7/pkg/credentials"
18
19
)
@@ -82,16 +83,17 @@ func convertMinioErr(err error) error {
82
83
func NewMinioStorage (ctx context.Context , cfg interface {}) (ObjectStorage , error ) {
83
84
configInterface , err := toConfig (MinioStorageConfig {}, cfg )
84
85
if err != nil {
85
- return nil , err
86
+ return nil , convertMinioErr ( err )
86
87
}
87
88
config := configInterface .(MinioStorageConfig )
88
89
90
+ log .Info ("Creating Minio storage at %s:%s with base path %s" , config .Endpoint , config .Bucket , config .BasePath )
89
91
minioClient , err := minio .New (config .Endpoint , & minio.Options {
90
92
Creds : credentials .NewStaticV4 (config .AccessKeyID , config .SecretAccessKey , "" ),
91
93
Secure : config .UseSSL ,
92
94
})
93
95
if err != nil {
94
- return nil , err
96
+ return nil , convertMinioErr ( err )
95
97
}
96
98
97
99
if err := minioClient .MakeBucket (ctx , config .Bucket , minio.MakeBucketOptions {
@@ -100,7 +102,7 @@ func NewMinioStorage(ctx context.Context, cfg interface{}) (ObjectStorage, error
100
102
// Check to see if we already own this bucket (which happens if you run this twice)
101
103
exists , errBucketExists := minioClient .BucketExists (ctx , config .Bucket )
102
104
if ! exists || errBucketExists != nil {
103
- return nil , err
105
+ return nil , convertMinioErr ( err )
104
106
}
105
107
}
106
108
@@ -121,7 +123,7 @@ func (m *MinioStorage) Open(path string) (Object, error) {
121
123
var opts = minio.GetObjectOptions {}
122
124
object , err := m .client .GetObject (m .ctx , m .bucket , m .buildMinioPath (path ), opts )
123
125
if err != nil {
124
- return nil , err
126
+ return nil , convertMinioErr ( err )
125
127
}
126
128
return & minioObject {object }, nil
127
129
}
@@ -137,7 +139,7 @@ func (m *MinioStorage) Save(path string, r io.Reader) (int64, error) {
137
139
minio.PutObjectOptions {ContentType : "application/octet-stream" },
138
140
)
139
141
if err != nil {
140
- return 0 , err
142
+ return 0 , convertMinioErr ( err )
141
143
}
142
144
return uploadInfo .Size , nil
143
145
}
@@ -184,22 +186,26 @@ func (m *MinioStorage) Stat(path string) (os.FileInfo, error) {
184
186
return nil , os .ErrNotExist
185
187
}
186
188
}
187
- return nil , err
189
+ return nil , convertMinioErr ( err )
188
190
}
189
191
return & minioFileInfo {info }, nil
190
192
}
191
193
192
194
// Delete delete a file
193
195
func (m * MinioStorage ) Delete (path string ) error {
194
- return m .client .RemoveObject (m .ctx , m .bucket , m .buildMinioPath (path ), minio.RemoveObjectOptions {})
196
+ if err := m .client .RemoveObject (m .ctx , m .bucket , m .buildMinioPath (path ), minio.RemoveObjectOptions {}); err != nil {
197
+ return convertMinioErr (err )
198
+ }
199
+ return nil
195
200
}
196
201
197
202
// URL gets the redirect URL to a file. The presigned link is valid for 5 minutes.
198
203
func (m * MinioStorage ) URL (path , name string ) (* url.URL , error ) {
199
204
reqParams := make (url.Values )
200
205
// TODO it may be good to embed images with 'inline' like ServeData does, but we don't want to have to read the file, do we?
201
206
reqParams .Set ("response-content-disposition" , "attachment; filename=\" " + quoteEscaper .Replace (name )+ "\" " )
202
- return m .client .PresignedGetObject (m .ctx , m .bucket , m .buildMinioPath (path ), 5 * time .Minute , reqParams )
207
+ u , err := m .client .PresignedGetObject (m .ctx , m .bucket , m .buildMinioPath (path ), 5 * time .Minute , reqParams )
208
+ return u , convertMinioErr (err )
203
209
}
204
210
205
211
// IterateObjects iterates across the objects in the miniostorage
@@ -213,13 +219,13 @@ func (m *MinioStorage) IterateObjects(fn func(path string, obj Object) error) er
213
219
}) {
214
220
object , err := m .client .GetObject (lobjectCtx , m .bucket , mObjInfo .Key , opts )
215
221
if err != nil {
216
- return err
222
+ return convertMinioErr ( err )
217
223
}
218
224
if err := func (object * minio.Object , fn func (path string , obj Object ) error ) error {
219
225
defer object .Close ()
220
226
return fn (strings .TrimPrefix (m .basePath , mObjInfo .Key ), & minioObject {object })
221
227
}(object , fn ); err != nil {
222
- return err
228
+ return convertMinioErr ( err )
223
229
}
224
230
}
225
231
return nil
0 commit comments