public override async Task <string> SaveAsync(FileProviderSaveArgs args) { var fileName = S3FileNameCalculator.Calculate(args); var configuration = args.Configuration.GetS3Configuration(); var client = GetS3Client(args); var containerName = GetContainerName(args); if (!args.OverrideExisting && await FileExistsAsync(client, containerName, fileName, args.CancellationToken)) { throw new FileAlreadyExistsException($"Saving File '{args.FileId}' does already exists in the container '{containerName}'! Set {nameof(args.OverrideExisting)} if it should be overwritten."); } if (configuration.CreateBucketIfNotExists) { await CreateBucketIfNotExists(client, containerName); } if (configuration.EnableSlice && (args.FileStream.Length > configuration.SliceSize)) { await MultipartUploadInternal(client, containerName, fileName, args.FileStream, configuration.UseChunkEncoding, configuration.SliceSize); } else { await SingleUploadInternal(client, containerName, fileName, args.FileStream, configuration.UseChunkEncoding); } args.FileStream?.Dispose(); return(fileName); }
public override async Task <bool> ExistsAsync(FileProviderExistsArgs args) { var fileName = S3FileNameCalculator.Calculate(args); var client = GetS3Client(args); var containerName = GetContainerName(args); return(await FileExistsAsync(client, containerName, fileName, args.CancellationToken)); }
public override async Task <bool> DownloadAsync(FileProviderDownloadArgs args) { var fileName = S3FileNameCalculator.Calculate(args); var client = GetS3Client(args); var containerName = GetContainerName(args); var getObjectResponse = await client.GetObjectAsync(containerName, fileName); await getObjectResponse.WriteResponseStreamToFileAsync(args.Path, true, args.CancellationToken); return(true); }
public override async Task <bool> DeleteAsync(FileProviderDeleteArgs args) { var fileName = S3FileNameCalculator.Calculate(args); var client = GetS3Client(args); var containerName = GetContainerName(args); if (await FileExistsAsync(client, containerName, fileName, args.CancellationToken)) { await client.DeleteAsync(containerName, fileName, null, args.CancellationToken); return(true); } return(false); }
public override async Task <Stream> GetOrNullAsync(FileProviderGetArgs args) { var fileName = S3FileNameCalculator.Calculate(args); var client = GetS3Client(args); var containerName = GetContainerName(args); if (!await FileExistsAsync(client, containerName, fileName, args.CancellationToken)) { return(null); } var getObjectResponse = await client.GetObjectAsync(containerName, fileName); if (getObjectResponse.ResponseStream != null) { var memoryStream = new MemoryStream(); await getObjectResponse.ResponseStream.CopyToAsync(memoryStream); return(memoryStream); } return(null); }
public override Task <string> GetAccessUrlAsync(FileProviderAccessArgs args) { var fileName = S3FileNameCalculator.Calculate(args); var client = GetS3Client(args); var containerName = GetContainerName(args); var configuration = args.Configuration.GetS3Configuration(); var preSignedUrlRequest = new GetPreSignedUrlRequest() { BucketName = containerName, Key = fileName, Protocol = (Protocol)configuration.Protocol }; if (args.Expires.HasValue) { preSignedUrlRequest.Expires = args.Expires.Value; } var accessUrl = client.GetPreSignedURL(preSignedUrlRequest); return(Task.FromResult(accessUrl)); }