Backblaze Agent (ไคลเอนต์) สำหรับ .NET Core เป็นการปรับใช้ Backblaze B2 Cloud Storage API Backblaze B2 Cloud Storage มอบพื้นที่เก็บข้อมูลบนคลาวด์ที่ถูกที่สุดบนอินเทอร์เน็ต Backblaze B2 Cloud Storage มีราคาเท่ากับ ¼ ของราคาของผู้ให้บริการพื้นที่จัดเก็บข้อมูลรายอื่น ทดลองใช้งานเพราะพื้นที่เก็บข้อมูล 10 GB แรกฟรี
รองรับ Backblaze B2 Cloud Storage API v2 อย่างเต็มรูปแบบ รวมถึงไฟล์ บัญชี คีย์ และบัคเก็ต
สร้างการกำหนดเป้าหมาย .NET Standard 2.0 ซึ่งหมายความว่า Backblaze Agent จะทำงานบนระบบ Windows, Mac และ Linux
ผสานรวมกับ .NET Core Dependency Injection และ HttpClientFactory ได้อย่างราบรื่นเพื่อปรับใช้คำขอที่ยืดหยุ่น
แคชตอบสนองในหน่วยความจำอย่างง่ายโดยใช้ MemoryCache
รองรับไฟล์ขนาดใหญ่ที่มีการจัดสรรหน่วยความจำเหลือน้อยและสถานะ IProgress
การสนับสนุนดั้งเดิมของโมเดลการเขียนโปรแกรมตามงาน (async/await)
สำหรับคำขอคุณสมบัติและรายงานข้อผิดพลาด โปรดเปิดปัญหาบน GitHub
ในการติดตั้ง Backblaze.Agent ให้รันคำสั่งต่อไปนี้:
> dotnet เพิ่มแพ็คเกจ Backblaze.Agent
อยู่ระหว่างดำเนินการ! แม้ว่าเราจะสนับสนุนให้ผู้ใช้เล่นกับตัวอย่างและโปรแกรมทดสอบ แต่โปรเจ็กต์นี้ยังไม่ถึงสถานะที่เสถียร
คุณจะต้องมี key_id และ application_key เพื่อกำหนดค่า Backblaze Agent คุณสามารถรับสิ่งเหล่านี้ได้จากพอร์ทัล Backblaze B2 Cloud Storage ดูตัวอย่างโครงการสำหรับตัวอย่างวิธีใช้แพ็คเกจนี้
โมฆะสาธารณะ ConfigureServices (บริการ IServiceCollection) {services.AddBackblazeAgent (ตัวเลือก => {options.KeyId = "[key_id]";options.ApplicationKey = "[application_key]";});} หากต้องการรับรายการบัคเก็ตของ backblaze เพียงฉีด IStorageClient ลงในคลาสของคุณและเรียกไคลเอ็นต์ async
IndexModel คลาสสาธารณะ: PageModel{
IStorageClient _storage แบบอ่านอย่างเดียวส่วนตัว;
IndexModel สาธารณะ (ที่เก็บข้อมูล IStorageClient)
{ _storage = ที่เก็บข้อมูล;
-
[ผูกคุณสมบัติ]
สาธารณะ IEnumerable <BucketItem> ที่เก็บข้อมูล { รับ; ชุดส่วนตัว -
งาน async สาธารณะ <IActionResult> OnGetAsync ()
{Buckets = await _storage.Buckets.GetAsync();if (Buckets == null){ return NotFound();}return Page();
-ติดตั้งแพ็คเกจต่อไปนี้:
> dotnet เพิ่มแพ็คเกจ Backblaze.Client> dotnet เพิ่มแพ็คเกจ Microsoft.Extensions.Caching.Memory> dotnet เพิ่มแพ็คเกจ Microsoft.Extensions.Logging.Debug
รหัสตัวอย่าง:
โปรแกรมชั้นเรียน{
ไคลเอ็นต์ IStorageClient แบบคงที่ส่วนตัว
งานหลัก async แบบคงที่ (สตริง [] args)
{ลอง{ var options = new ClientOptions(); var loggerFactory = LoggerFactory.Create(builder => {builder .AddFilter("Bytewizer.Backblaze", LogLevel.Trace) .AddDebug(); }); แคช var = MemoryCache ใหม่ (MemoryCacheOptions ใหม่ ()); ลูกค้า = BackblazeClient ใหม่ (ตัวเลือก, loggerFactory, แคช);
รอ Client.ConnectAsync("[key_id]", "[application_key]"); var buckets = รอ Client.Buckets.GetAsync(); foreach (var bucket ใน buckets)Console.WriteLine($"ชื่อ Bucket: {bucket.BucketName} - ประเภท: {bucket.BucketType}"); } catch (ข้อยกเว้นเช่น) { Console.Error.WriteLine (เช่น Message);}
-ติดตั้งแพ็คเกจต่อไปนี้:
> dotnet เพิ่มแพ็คเกจ Backblaze.Client
รหัสตัวอย่าง:
โปรแกรมชั้นเรียน{
ไคลเอ็นต์ IStorageClient แบบคงที่ส่วนตัว
โมฆะคงที่หลัก (สตริง [] args)
{ลอง{ ลูกค้า = ใหม่ BackblazeClient(); Client.Connect("[key_id]", "[application_key]"); ที่เก็บข้อมูล var = Client.Buckets.GetAsync().GetAwaiter().GetResult(); foreach (var bucket ใน buckets)Console.WriteLine($"Bucket Name: {bucket.BucketName} - Type: {bucket.BucketType}");}catch (ข้อยกเว้น เช่น){ Console.Error.WriteLine(ex.Message); }
-อัปโหลดไฟล์สตรีม
foreach (var filePath ใน Directory.GetFiles(@"c:mydirectory")){
การใช้ (var stream = File.OpenRead(filePath))
{var results = await Client.UploadAsync("[BucketId]", new FileInfo(filePath).Name, stream);
-ดาวน์โหลดไฟล์สตรีม
ไฟล์ var = สตริงใหม่ [] { @"c:mydirectoryfile1.txt", "file2.bat" };foreach (ชื่อไฟล์ var ในไฟล์){
การใช้ (var stream = File.Create (ชื่อไฟล์))
{ ผลลัพธ์ var = รอ Client.DownloadAsync("[BucketName]", fileName, stream);
-ติดตั้งแพ็คเกจ Microsoft.Extensions.Logging:
> dotnet เพิ่มแพ็คเกจ Microsoft.Extensions.Logging.Debug
การติดตามไปยังหน้าต่าง Debug สามารถเปิดใช้งานได้ด้วยรหัสต่อไปนี้:
services.AddLogging(builder =>{builder.AddDebug();builder.AddFilter("Bytewizer.Backblaze", LogLevel.Trace);}); services.AddBackblazeAgent(ตัวเลือก =>{
options.KeyId = "[key_id]";
options.ApplicationKey = "[application_key]";});ตารางต่อไปนี้อธิบายตัวเลือกตัวแทนที่มี:
| ชื่อตัวเลือก | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
| รหัสคีย์ | - | จำเป็น - ตัวระบุคีย์ที่ใช้ในการตรวจสอบสิทธิ์ |
| ApplicationKey | - | จำเป็น - ส่วนลับของคีย์ที่ใช้ในการตรวจสอบสิทธิ์ |
| ตัวจัดการอายุการใช้งาน | 600 | เวลาเป็นวินาทีที่อินสแตนซ์ตัวจัดการข้อความสามารถนำมาใช้ซ้ำได้ |
| หมดเวลา | 600 | เวลาเป็นวินาทีที่จะรอก่อนที่คำขอของไคลเอ็นต์จะหมดเวลา |
| ลองนับอีกครั้ง | 5 | จำนวนครั้งที่ไคลเอ็นต์จะลองคำขอที่ล้มเหลวอีกครั้งก่อนที่จะหมดเวลา |
| ขอMaxParallel | 10 | จำนวนสูงสุดของการเชื่อมต่อคำขอแบบขนานที่สร้างขึ้น |
| ดาวน์โหลดMaxParallel | 5 | สร้างการเชื่อมต่อการดาวน์โหลดแบบขนานจำนวนสูงสุดแล้ว |
| ดาวน์โหลดCutoffSize | 100MB | ดาวน์โหลดขนาดจุดตัดเพื่อสลับไปยังส่วนที่เป็นชิ้นเป็นไบต์ |
| ดาวน์โหลดPartSize.dll | 100MB | ดาวน์โหลดขนาดชิ้นส่วนของชิ้นส่วนที่แบ่งเป็นไบต์ |
| อัปโหลดMaxParallel | 3 | สร้างการเชื่อมต่ออัพโหลดแบบขนานจำนวนสูงสุดแล้ว |
| อัพโหลด CutoffSize | 100MB | อัปโหลดขนาดจุดตัดเพื่อสลับไปยังส่วนที่เป็นชิ้นเป็นไบต์ |
| อัปโหลด PartSize | 100MB | อัปโหลดขนาดชิ้นส่วนของชิ้นส่วนเป็นไบต์ |
| ตั้งค่าขนาดชิ้นส่วนอัตโนมัติ | เท็จ | ใช้ขนาดชิ้นส่วนที่แนะนำซึ่งส่งคืนโดยบริการ Backblaze |
| เช็คซัมปิดการใช้งาน | เท็จ | ใช้สำหรับการทดสอบเท่านั้น และไม่แนะนำสำหรับสภาพแวดล้อมการใช้งานจริง |
| โหมดทดสอบ | - | ใช้สำหรับการทดสอบเท่านั้น และไม่แนะนำสำหรับสภาพแวดล้อมการใช้งานจริง |
services.AddBackblazeAgent(ตัวเลือก =>{
// ใช้สำหรับการทดสอบเท่านั้น และไม่แนะนำสำหรับสภาพแวดล้อมการใช้งานจริง
options.TestMode = "fail_some_uploads"; -ตัวเลือกโหมดทดสอบต่อไปนี้มีไว้เพื่อตรวจสอบว่ารหัสของคุณจัดการกับเงื่อนไขข้อผิดพลาดได้อย่างถูกต้อง
| สตริงตัวเลือก | คำอธิบาย |
|---|---|
| failed_some_uploads | การอัปโหลดแบบสุ่มล้มเหลวหรือถูกปฏิเสธโดยบริการ |
| expir_some_account_authorization_tokens | โทเค็นการอนุญาตบัญชีแบบสุ่มจะหมดอายุ |
| force_cap_exceeded | บังคับเกินเงื่อนไข Cap |
คุณจะต้องมี key_id และ application_key เพื่อกำหนดค่าไฟล์ Backblaze Test Agent settings.json
แหล่งที่มา เอกสาร คำแนะนำ และผลิตภัณฑ์ทั้งหมดของโครงการนี้มีให้ตามที่เป็นอยู่โดยไม่มีการรับประกัน จะไม่รับผิดชอบต่อความเสียหาย การสูญหายของข้อมูล หรือค่าใช้จ่ายใดๆ ที่เกิดขึ้นจากการใช้งาน
master - นี่คือสาขาที่มีรีลีสล่าสุด - ไม่ควรสนับสนุนสาขานี้โดยตรง
พัฒนา - นี่คือสาขาการพัฒนาที่ผู้มีส่วนร่วมควรเสนอให้สนับสนุนตามคำขอดึง สาขาการพัฒนานี้จะถูกรวมเข้ากับสาขาหลักเป็นระยะ และจะเผยแพร่ไปยัง NuGet Gallery
การมีส่วนร่วมในโครงการนี้ยินดีต้อนรับเสมอ โปรดพิจารณาแยกโปรเจ็กต์นี้บน GitHub และส่งคำขอดึงเพื่อเพิ่มการปรับปรุงของคุณลงในโปรเจ็กต์ดั้งเดิม