feat: complete API-driven projects with infrastructure and business acceptance
This commit is contained in:
@@ -19,10 +19,10 @@ type Store struct {
|
||||
maxBytes int64
|
||||
}
|
||||
|
||||
// New borrows a configured SDK client. This adapter uses simple uploads; large
|
||||
// multipart uploads are a separate provider capability, not buffered in memory.
|
||||
// New borrows a configured SDK client. Put uses simple uploads (up to 5 GiB).
|
||||
// Larger objects use the optional MultipartStore capability.
|
||||
func New(client *sdk.Client, bucket string, maxBytes int64) (*Store, error) {
|
||||
if client == nil || bucket == "" || maxBytes < 0 || maxBytes > 5<<30 {
|
||||
if client == nil || bucket == "" || maxBytes < 0 || maxBytes > 5<<40 {
|
||||
return nil, errors.New("storage/oss: invalid client, bucket or size limit")
|
||||
}
|
||||
if maxBytes == 0 {
|
||||
@@ -41,7 +41,14 @@ func (s *Store) Put(ctx context.Context, key string, reader io.Reader, size int6
|
||||
if size > s.maxBytes {
|
||||
return storage.Info{}, storage.ErrTooLarge
|
||||
}
|
||||
_, err := s.client.PutObject(ctx, &sdk.PutObjectRequest{Bucket: sdk.Ptr(s.bucket), Key: sdk.Ptr(key), ContentLength: sdk.Ptr(size), ContentType: sdk.Ptr(contentType), Body: storage.ContextReader{Context: ctx, Reader: reader}})
|
||||
if size > 5<<30 {
|
||||
return storage.Info{}, storage.ErrTooLarge
|
||||
}
|
||||
checked, err := (storage.UploadPolicy{MaxBytes: s.maxBytes}).PrepareUpload(ctx, reader, size, contentType)
|
||||
if err != nil {
|
||||
return storage.Info{}, err
|
||||
}
|
||||
_, err = s.client.PutObject(ctx, &sdk.PutObjectRequest{Bucket: sdk.Ptr(s.bucket), Key: sdk.Ptr(key), ContentLength: sdk.Ptr(size), ContentType: sdk.Ptr(contentType), Body: checked})
|
||||
if err != nil {
|
||||
return storage.Info{}, mapError(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user