Skip to content

Добавлен пример на .NET 10#3

Open
axtox wants to merge 26 commits into
timeweb-cloud:masterfrom
axtox:master
Open

Добавлен пример на .NET 10#3
axtox wants to merge 26 commits into
timeweb-cloud:masterfrom
axtox:master

Conversation

@axtox

@axtox axtox commented Jun 8, 2025

Copy link
Copy Markdown

Описание

Добавлен пример использования Amazon S3 SDK для работы с S3-хранилищем Timeweb Cloud на платформе .NET. Пример демонстрирует основные операции с объектным хранилищем, включая создание и удаление бакетов, загрузку и скачивание файлов, а также работу с метаданными объектов. Проект сопровождается подробной инструкцией по запуску через CLI, Docker и Visual Studio Code.

Мотивация

Особенности работы TimeWeb S3 с новыми версиями AWS SDK (как выяснилось, PutObject с latest 4.x AWS.SDK не работают с TimeWeb S3) которые могут вызвать трудности в подключении на современных стеках (предположительно влияющие на интеграцию с разными языками, а не только .NET)
Этот репозиторий призван показать работающие версии AWS SDK, чтобы сократить время внедрения TimeWeb S3 в проекты.

Что сделано

  • Найдена самая актуальная совместимая версия AWS SDK (<=3.5.10.2) для корректной работы с Timeweb Cloud S3, также найден способ работать с последней 4.0.2 через использование флага DisableDefaultChecksumValidation
  • Реализован консольный пример на .NET (sample.cs), демонстрирующий работу с S3 API Timeweb Cloud через официальный AWS SDK, точно также как в других примерах в этом репозитории
  • Поддержка конфигурации через переменные окружения и файл .env (используется DotNetEnv).
  • Добавлены основные операции:
    • Регион бакета
    • Список бакетов
    • Отправка текста в файл
    • Отправка файла
    • Получение списка файловы
    • Скачивание файла
    • Получение метаданных файла
    • Копирование файла
    • Присвоение тега файлу
    • Получение информации о тегах в файле
    • Создание правил жизненного цикла файлов (правила по тегу, по названию папок)
    • Получение правил жизненного цикла файлов
    • Удаление всех тегов файла
    • Удаление правил жизненного цикла файлов
    • Удаление всех файлов
    • Удаление бакета
  • Для вывода результатов операций используется форматированный JSON с помощью Spectre.Console.Json.
  • Добавлены обработчики ошибок для всех операций.
  • Оформлена документация по запуску и использованию примера (см. README.md).
  • Пример поддерживает запуск через dotnet CLI, Docker и Visual Studio Code tasks.

Тикет

#4

Copilot AI review requested due to automatic review settings June 30, 2026 12:43

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new .NET 10 example to the repository, demonstrating core Amazon S3 (Timeweb Cloud S3-compatible) operations via the AWS SDK, along with run instructions for CLI, Docker, and VS Code tasks.

Changes:

  • Added a C# direct-file sample (dotnet/src/sample.cs) covering bucket/object operations, tagging, and lifecycle rules with JSON-formatted output.
  • Added .NET-specific documentation and environment configuration templates (dotnet/README.md, .env.example), plus VS Code tasks and ignore files.
  • Added a root README link to the new .NET example folder.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
README.md Adds a link to the new .NET example section.
dotnet/src/sample.cs Implements the .NET S3 sample showcasing common API operations and formatted output.
dotnet/src/.env.example Provides an example .env template for S3 credentials/config.
dotnet/README.md Documents how to run the sample via CLI, Docker, and VS Code tasks.
dotnet/Dockerfile Adds a multi-stage Docker build for the sample.
dotnet/.gitignore Ensures build artifacts and .env are not committed.
dotnet/.dockerignore Attempts to exclude .env from Docker build context.
.vscode/tasks.json Adds tasks to run locally and build/run via Docker from VS Code.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread dotnet/src/sample.cs
Comment on lines +284 to +286
var response = await action;
using var reader = new StreamReader(response.ResponseStream);
// Исключительно для текстовых файлов
Comment thread dotnet/src/sample.cs
using System.Text.Json.Serialization.Metadata;

var settings = LoadS3Settings();
var s3Client = CreateS3Client(settings);
Comment thread dotnet/src/sample.cs Outdated
Comment on lines +43 to +44
// флаг для обратной совместимостью с Timeweb S3, убрать когда Timeweb S3 актуализируется
DisableDefaultChecksumValidation = true
Comment thread dotnet/src/sample.cs Outdated
Comment on lines +56 to +57
// флаг для обратной совместимостью с Timeweb S3, убрать когда Timeweb S3 актуализируется
DisableDefaultChecksumValidation = true
Comment thread dotnet/README.md Outdated
# Использование dotnet-sdk Для Работы с S3 Хранилищем Timeweb Cloud
## Описание
> [!WARNING]
> Версия NuGet пакета `AWS.SDK` в примере `<=4.0.2`, однако, на Июнь 2025 года она не работает полноценно с методами `PutObject` (для работы `PutObject` необходимо либо установить флаг `DisableDefaultChecksumValidation` в `true` во время создания запроса `PutObjectRequest`, либо использовать версию SDK `<=3.5.10.2`), поскольку Timeweb S3 пока что не поддерживает самые последние версии .NET клиентов. Предположительно, это связано с обновлением не самого S3 API, который так и остался в версии `2006-03-01`, но с новыми требованиями к сети (HTTP/2), валидацией checksum (DefaultChecksumValidation), `nullable` поля и др.
Comment thread dotnet/README.md
> Версия NuGet пакета `AWS.SDK` в примере `<=4.0.2`, однако, на Июнь 2025 года она не работает полноценно с методами `PutObject` (для работы `PutObject` необходимо либо установить флаг `DisableDefaultChecksumValidation` в `true` во время создания запроса `PutObjectRequest`, либо использовать версию SDK `<=3.5.10.2`), поскольку Timeweb S3 пока что не поддерживает самые последние версии .NET клиентов. Предположительно, это связано с обновлением не самого S3 API, который так и остался в версии `2006-03-01`, но с новыми требованиями к сети (HTTP/2), валидацией checksum (DefaultChecksumValidation), `nullable` поля и др.

Приложение показывает использование S3 хранилища Timeweb Cloud в `dotnet`, при запуске будут выполнены следующие команды:
1. Создание бакета (если уже существует - вернет детали существующего бакета)
Comment thread dotnet/README.md
1. Список бакетов
1. Отправка текста в файл
1. Отправка файла
1. Получение списка файловы
Comment thread dotnet/README.md Outdated
Comment on lines +55 to +56
```console
docker build -t dotnet-s3-example:latest ./src
Comment thread .vscode/tasks.json
Comment on lines +21 to +24
"dockerBuild": {
"context": "${workspaceFolder}/dotnet/src",
"dockerfile": "${workspaceFolder}/dotnet/Dockerfile",
"tag": "dotnet-s3-example:latest"
Comment thread dotnet/src/.env.example
# можно найти во вкладке `Дашборд` в разделе `Хранилище S3`
# в личном кабинете Timeweb Cloud.

# Ковычки в значениях использовать не следует, так как они плохо распознаются командой docker run.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants