(ctx context.Context, dstDir model.Obj, fileStream model.FileStreamer, up driver.UpdateProgress)
| 361 | } |
| 362 | |
| 363 | func (d *HalalCloud) put(ctx context.Context, dstDir model.Obj, fileStream model.FileStreamer, up driver.UpdateProgress) (model.Obj, error) { |
| 364 | |
| 365 | newDir := path.Join(dstDir.GetPath(), fileStream.GetName()) |
| 366 | |
| 367 | result, err := pubUserFile.NewPubUserFileClient(d.HalalCommon.serv.GetGrpcConnection()).CreateUploadToken(ctx, &pubUserFile.File{ |
| 368 | Path: newDir, |
| 369 | }) |
| 370 | if err != nil { |
| 371 | return nil, err |
| 372 | } |
| 373 | u, _ := url.Parse(result.Endpoint) |
| 374 | u.Host = "s3." + u.Host |
| 375 | result.Endpoint = u.String() |
| 376 | s, err := session.NewSession(&aws.Config{ |
| 377 | HTTPClient: base.HttpClient, |
| 378 | Credentials: credentials.NewStaticCredentials(result.AccessKey, result.SecretKey, result.Token), |
| 379 | Region: aws.String(result.Region), |
| 380 | Endpoint: aws.String(result.Endpoint), |
| 381 | S3ForcePathStyle: aws.Bool(true), |
| 382 | }) |
| 383 | if err != nil { |
| 384 | return nil, err |
| 385 | } |
| 386 | uploader := s3manager.NewUploader(s, func(u *s3manager.Uploader) { |
| 387 | u.Concurrency = d.uploadThread |
| 388 | }) |
| 389 | if fileStream.GetSize() > s3manager.MaxUploadParts*s3manager.DefaultUploadPartSize { |
| 390 | uploader.PartSize = fileStream.GetSize() / (s3manager.MaxUploadParts - 1) |
| 391 | } |
| 392 | reader := driver.NewLimitedUploadStream(ctx, fileStream) |
| 393 | _, err = uploader.UploadWithContext(ctx, &s3manager.UploadInput{ |
| 394 | Bucket: aws.String(result.Bucket), |
| 395 | Key: aws.String(result.Key), |
| 396 | Body: io.TeeReader(reader, driver.NewProgress(fileStream.GetSize(), up)), |
| 397 | }) |
| 398 | return nil, err |
| 399 | |
| 400 | } |
| 401 | |
| 402 | var _ driver.Driver = (*HalalCloud)(nil) |
no test coverage detected