feat: complete API-driven projects with infrastructure and business acceptance

This commit is contained in:
2026-09-23 17:33:50 +08:00
parent 04a1f7999d
commit 2c74dc0859
137 changed files with 11926 additions and 105 deletions

View File

@@ -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)
}