1. บทนำ
คลาวด์ไม่ใช่แนวคิดใหม่ จริงๆ แล้วคลาวด์คืออะไร แม้ว่าคุณจะขอให้ฉันอธิบายให้ชัดเจน แต่ฉันก็ยังอธิบายไม่ได้ ในตอนนี้เรียกว่าคลาวด์หากเชื่อมต่อกับอินเทอร์เน็ต ยังคงมีผู้ให้บริการระบบคลาวด์ในประเทศจำนวนมาก และมีสองประเภทหลักๆ ได้แก่ ผู้ให้บริการระบบคลาวด์ที่มีลักษณะคล้ายโฮสต์คล้ายกับ Alibaba Cloud เช่น Wanwang และผู้ให้บริการพื้นที่แบบดั้งเดิมอื่นๆ เช่น BAE แซ่. เมื่อเปรียบเทียบกับผู้ให้บริการพื้นที่ เช่น Alibaba Cloud ระดับเริ่มต้นสำหรับแพลตฟอร์มการโฮสต์แอปพลิเคชันนั้นต่ำกว่า ถือเป็นแพลตฟอร์มการทดสอบที่ดีสำหรับโปรแกรมเมอร์ส่วนใหญ่ที่ประสบปัญหา
โปรแกรมอัปเกรดซอฟต์แวร์ที่ฉันรับผิดชอบเมื่อเร็วๆ นี้เกี่ยวข้องกับหลายแพลตฟอร์ม หลายไฟล์ และหลายเวอร์ชัน หากฉันสร้างเซิร์ฟเวอร์ไฟล์ของตัวเอง แบนด์วิดท์จะไม่สามารถตอบสนองความต้องการทางธุรกิจได้อย่างแน่นอน ดังนั้นฉันจึงเริ่มใช้บริการ Baidu Cloud Storage BCS ตอนนี้มันใช้งานได้ตามปกติ แต่อาการชักเป็นระยะๆ ทำให้ฉันต้องหันมาใช้ Alibaba Cloud Storage เพราะท้ายที่สุดแล้ว สิ่งสำคัญในเชิงพาณิชย์ก็ยังต้องทำในเชิงพาณิชย์และเป็นมืออาชีพ อย่างน้อยหากมีปัญหา ต่างจาก Baidu Cloud Storage ตรงที่ฝ่ายบริการลูกค้าไม่สามารถทำได้ สามารถพบได้ แต่สำหรับการใช้งานทางเทคนิค เรามาพูดถึงการใช้ที่เก็บข้อมูลบนคลาวด์กันดีกว่า
2. ขั้นตอนการใช้งาน
1. ลงทะเบียนบัญชี Baidu
ฉันไม่จำเป็นต้องพูดแบบนี้
2. เรียกว่านักพัฒนา
เข้าสู่ "Baidu Open Cloud Platform" (ฉันไม่รู้จัก Baidu เอง) หากคุณไม่ใช่นักพัฒนาหลังจากเข้าสู่ระบบ คุณจะได้รับแจ้งให้ลงทะเบียนเป็นนักพัฒนา หลังจากกรอกข้อมูลเรียบร้อยแล้ว
3. สร้างแอปพลิเคชัน
ไปที่หน้าแรกของ Baidu Open Cloud และสร้างแอปพลิเคชัน BAE เมื่อสร้าง อย่าเลือกวิธีแก้ปัญหา: ใช้ BAE เว้นแต่คุณจะยังมีเว็บไซต์ให้ค้าง ไม่เป็นไรที่จะลองดู หลังจากเข้าไปแล้ว ให้เลือกที่เก็บข้อมูลบนคลาวด์และสร้าง Bucket (จะอธิบายในภายหลัง)
4. ดาวน์โหลด SDK
5. รหัสทดสอบ
3. ความยากลำบากและความสนใจ
1. SDK ที่ไม่มี API หรือไม่มี API โดยละเอียดต้องใช้พลังงานในการอ่านเป็นจำนวนมาก และไม่สะดวกเท่ากับการอ่านบล็อกของผู้อื่นด้วยซ้ำ
2. ความเข้าใจแนวคิด
ที่เก็บข้อมูล: หลังจากสร้างแอปพลิเคชันแล้ว Bucket คืออะไร ให้คิดว่ามันเป็นอักษรระบุไดรฟ์ใน Windows เช่นเดียวกับที่คุณสร้างไดรฟ์ D ซึ่งคุณสามารถใส่ไฟล์และโฟลเดอร์ได้ ถูกสร้างขึ้น จริงๆ แล้ว ไม่ถูกต้องที่จะบอกว่า Bucket เป็นอักษรระบุไดรฟ์ เนื่องจากเป็นเหมือนไดเรกทอรีรากใน Linux มากกว่า เมื่ออ่านไฟล์ของคุณ คุณไม่สามารถพูดได้ว่าไฟล์ของฉันคือ: 1.txt แทน: /1.txt ประกาศไว้ในรหัส
วัตถุ: วัตถุแสดงถึงไฟล์ ประกอบด้วยข้อมูลเมตาและบล็อกไฟล์จำนวนมาก (อ้างอิงถึงระบบไฟล์) ข้อมูลเมตาประกอบด้วยชื่อไฟล์ ขนาดไฟล์ เวลา ฯลฯ ก่อนที่จะใช้ Object อย่าลืมจำ "/";
3. ดาวน์โหลดการรับรองความถูกต้อง
การใช้คำขอ http เพื่อดาวน์โหลดไฟล์ส่วนตัวต้องใช้พารามิเตอร์การตรวจสอบสิทธิ์ หากคุณอ่าน API อย่างเป็นทางการ จะอธิบายเฉพาะกระบวนการเข้ารหัสของการอนุญาต แต่ไม่มีเวอร์ชัน Java โดยเฉพาะ เนื่องจากได้มีการนำไปใช้ใน SDK แล้วจึงมีปัญหาเพียงเล็กน้อยเท่านั้น "/" ระหว่างบัคเก็ตและชื่อไฟล์ของที่อยู่การดาวน์โหลดที่สร้างโดย SDK จะถูกเข้ารหัส ซึ่งจะทำให้ผู้ดาวน์โหลดบางรายดาวน์โหลดไม่สำเร็จ ตัวอย่างเช่น QQ บนมือถือไม่สามารถดาวน์โหลดได้ จำเป็นต้องได้รับการประมวลผลอีกครั้ง
4. รหัส API และรหัสลับ
เข้าถึงแอปผ่านทางนี้
4. การใช้งานโดยละเอียด
1. แพ็คเกจคู่มือ
2. ส่วนหนึ่งของรหัส
การอนุญาต:
คัดลอกรหัสรหัสดังต่อไปนี้:
BCSHelper คลาสสาธารณะ {
โฮสต์สตริงส่วนตัว = "";//ชื่อโฮสต์: bcs.duapp.com
private String accessKey = ""; // สามารถดูได้ในแอปพลิเคชันที่คุณสร้าง
สตริงส่วนตัว SecretKey = "";
private String bucket = "";//ชื่อของบัคเก็ตที่คุณสร้างขึ้น
BaiduBCS ส่วนตัว baiduBCS = null;
BCSHelper สาธารณะ () {
this.host = Configuration.getHost();
this.accessKey = Configuration.getAccessKey();
this.secretKey = Configuration.getSecretKey();
this.bucket = Configuration.getBucket();
ข้อมูลรับรอง BCSCredentials = ข้อมูลรับรอง BCSCredentials ใหม่ (accessKey, SecretKey);
baiduBCS = BaiduBCS ใหม่ (ข้อมูลประจำตัว, โฮสต์);
baiduBCS.setDefaultEncoding("UTF-8"); // ค่าเริ่มต้น UTF-8
-
อัปโหลดและลบไฟล์:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
* อัปโหลดไฟล์ไปยัง BCS
-
* @return boolean true แสดงว่าการอัพโหลดสำเร็จ
* ไฟล์ @param
* ไฟล์ที่จะอัพโหลด
-
-
putObject บูลีนสาธารณะ (ไฟล์ไฟล์) {
ผลลัพธ์บูลีน = จริง;
พยายาม {
//ต้องขึ้นต้นด้วย "/"
คำขอ PutObjectRequest = PutObjectRequest ใหม่ (ที่เก็บข้อมูล "/" + file.getName (), ไฟล์);
//ตั้งค่าข้อมูลเมตาของวัตถุ
ข้อมูลเมตา ObjectMetadata = ใหม่ ObjectMetadata();
request.setMetadata(ข้อมูลเมตา);
baiduBCS.putObject (คำขอ);
LoggerService.addLoggerByOperate("BCS: อัปโหลดไฟล์ไปยัง BCS:"+file.getName());
} จับ (ข้อยกเว้นจ) {
ผลลัพธ์ = เท็จ;
LoggerService.addLoggerByError(e.getMessage());
e.printStackTrace();
-
ส่งคืนผลลัพธ์;
-
-
* ลบไฟล์ใน BCS ตามชื่อวัตถุ
-
* วัตถุ @param
* ชื่อวัตถุ
* @return การลบจริงบูลีนสำเร็จ
-
บูลีนสาธารณะ DeleteObject (วัตถุสตริง) {
ผลลัพธ์บูลีน = จริง;
พยายาม {
ถ้า (existObject (วัตถุ)) {
baiduBCS.deleteObject(ถัง, "/" + วัตถุ);
LoggerService.addLoggerByOperate("BCS: ลบไฟล์บน BCS:"+object);
-
} จับ (ข้อยกเว้นจ) {
ผลลัพธ์ = เท็จ;
e.printStackTrace();
LoggerService.addLoggerByError(e.getMessage());
-
ส่งคืนผลลัพธ์;
-
ตรวจสอบว่ามีวัตถุอยู่หรือไม่:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
* ตรวจสอบว่ามีไฟล์อยู่ใน BCS หรือไม่
-
* วัตถุ @param
* ชื่อวัตถุ
* @return boolean true บ่งชี้ถึงการมีอยู่จริง
-
บูลีนสาธารณะมีอยู่วัตถุ (วัตถุสตริง) {
ผลลัพธ์บูลีน = เท็จ;
พยายาม {
ผล = baiduBCS.doesObjectExist (ถัง, "/" + วัตถุ);
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
ส่งคืนผลลัพธ์;
-
สร้างที่อยู่ดาวน์โหลดที่เขียนด้วยตัวเอง:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
* รับที่อยู่ดาวน์โหลดของ Object
-
* วัตถุ @param
* ชื่อวัตถุ
* @return String ส่งคืน URL ที่ดาวน์โหลด
-
สตริงสาธารณะ getUrl (วัตถุสตริง) {
// เนื้อหาที่ต้องเข้ารหัส
ข้อมูลสตริง = "MBO" + "/n" + "Method=GET" + "/n" + "Bucket=" + bucket + "/n" + "Object=/" + object + "/n";
//ผลลัพธ์ที่เข้ารหัส
สตริง hmacsha1 = getHmacSHA1 (คีย์ลับ, ข้อมูล);
// สร้างพารามิเตอร์เครื่องหมาย
เครื่องหมายสตริง = "MBO:" + accessKey + /// + hmacsha1;
// URL
ตัวสร้าง StringBuilder = ตัวสร้าง StringBuilder ใหม่ ();
builder.append("http://");
builder.ผนวก(โฮสต์);
builder.ผนวก("/");
builder.append(ถัง);
builder.ผนวก("/");
builder.ผนวก(วัตถุ);
builder.ผนวก("?sign=");
builder.ผนวก(ลงชื่อ);
ส่งคืน builder.toString();
-
// การเข้ารหัสลายเซ็น
สตริงส่วนตัว getHmacSHA1 (สตริงคีย์ลับ ข้อมูลสตริง) {
ผลลัพธ์สตริง = "";
พยายาม {
SecretKeySpec signingKey = SecretKeySpec ใหม่ (secretKey.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(คีย์การลงนาม);
ไบต์ [] rawHmac = mac.doFinal(data.getBytes());
Base64 base64 = Base64 ใหม่ ();
@SuppressWarnings("การเข้าถึงแบบคงที่")
ไบต์ [] enbytes = base64.encodeBase64Chunked (rawHmac);
ผลลัพธ์ = สตริงใหม่ (enbytes, "utf-8");
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
ส่งคืนผลลัพธ์;
-
ที่อยู่ที่สร้าง SDK ที่แก้ไขแล้ว:
คัดลอกรหัสรหัสดังต่อไปนี้:
* รับที่อยู่ดาวน์โหลดของ Object
-
* วัตถุ @param
* ชื่อวัตถุ
* @return String ส่งคืน URL ที่ดาวน์โหลด
-
สาธารณะ String getUrl (วัตถุสตริง) {
ผลลัพธ์สตริง = "";
GenerateUrlRequest GenerateUrlRequest = GenerateUrlRequest ใหม่ (HttpMethodName.GET, ที่ฝากข้อมูล "/" + วัตถุ);
GenerateUrlRequest.setBcsSignCondition (BCSSignCondition ใหม่ ());
ผลลัพธ์ = baiduBCS.generateUrl (สร้าง UrlRequest);
result=result.replaceFirst("%2F", "/");
ส่งคืนผลลัพธ์;
-
นอกจากนี้ยังมีรหัสทดสอบมากมายที่ทางการให้มา และฉันได้ให้ไว้แล้ว หากคุณต้องการ ให้ดาวน์โหลดและศึกษาด้วยตัวเอง จากนั้นจึงสรุปและใช้ในโครงการจริงที่ฉันไม่พบ ความคืบหน้าของการอัปโหลดไฟล์ ฉันหวังว่าคุณจะบอกฉันได้ว่าคุณเห็นอะไร เพราะเขายังเป็นมือใหม่