Android — วิธีอัปโหลดเนื้อหา
พื้นหลัง
หนึ่งในกรณีการใช้งานที่ฉันพบเมื่อสร้างแอปพลิเคชัน Android คือการจัดการ UGC (เนื้อหาที่ผู้ใช้สร้างขึ้น) ทำให้ผู้ใช้แอปพลิเคชันสามารถอัปโหลดเนื้อหาจากโทรศัพท์ของตนไปยังเซิร์ฟเวอร์ที่ไหนสักแห่ง
งานนี้อาจยุ่งยากและจำเป็นต้องสร้างเลเยอร์เครือข่ายพื้นฐาน วิธีส่งผ่านเพย์โหลด จัดการการตอบสนอง และแยกวิเคราะห์เมื่อคำขอสำเร็จหรือจัดการข้อผิดพลาดในกรณีที่เกิดความล้มเหลว
มีหลายวิธีในการดำเนินการตามคำขออัปโหลดAsyncTaskเช่น
มีวิธีการทำแบบเดียวกันมากกว่าหนึ่งวิธี แต่ละวิธีมีข้อดีและข้อเสีย
ในบทความนี้ ฉันต้องการแสดงวิธีอื่นในการอัปโหลดโดยใช้Cloudinary SDKเพื่ออัปโหลดไปยัง Cloudinary Cloud ของคุณ แม้ใน Cloudinary เราก็มีวิธีอัปโหลดเนื้อหาไปยัง Cloud มากกว่าหนึ่งวิธี
ติดตั้ง
ก่อนที่เราจะเริ่มเราต้องตั้งค่าเล็กน้อย สิ่งแรก คือ
เราต้องลงทะเบียนสำหรับบัญชีที่Cloudinary
เมื่อคุณลงทะเบียนบัญชีแล้ว เราจำเป็นต้องได้รับชื่อคลาวด์ของเราจากแดชบอร์ด
เมื่อตั้งค่าบัญชีของคุณแล้ว เราจะย้ายไปที่รหัส
สิ่งแรกที่เราต้องทำคือเริ่มต้นMediaManagerวัตถุ
Map config = new HashMap();
config.put("cloud_name", "myCloudName");
MediaManager.init(this, config);
การอัปโหลดที่ไม่ได้ลงนาม
ในการอัปโหลดพื้นฐาน เราจำเป็นต้องเรียกMediaManager.get()อ็อบเจกต์ของเรา จากนั้นจึง เรียกใช้ upload()ฟังก์ชัน ฟังก์ชันupload()ได้รับเป็นพารามิเตอร์ของเพย์โหลดที่เราต้องการส่ง (อาจเป็นUri, InputStream, Stringและอื่นๆ) เราทำการunsignedอัปโหลด ซึ่งหมายความว่าเราต้องส่ง อัปโหลดที่ตั้งไว้ล่วงหน้า(อธิบายเกี่ยวกับการอัปโหลด dispatch()ที่ตั้งไว้ล่วงหน้าเล็กน้อย) และในที่สุดก็ทำการโทรที่เรากำลังเรียก
ด้วยเหตุนี้ เราจึงมีรหัสเฉพาะสำหรับคำขออัปโหลดนี้
String requestId = MediaManager.get().upload(imageFile).unsigned("sample_preset").dispatch();
เมื่อเราสร้างพรีเซ็ตการอัปโหลด เสร็จแล้ว เราสามารถใส่ไว้ในunsigned()เมธอดได้ แล้ว
ใช่ การอัปโหลดเนื้อหาไปยังระบบคลาวด์ของคุณนั้นง่ายมาก เมื่อรูปภาพเสร็จสิ้นกระบวนการอัปโหลดแล้ว เราก็สามารถเริ่มทดลองการแปลงร่างได้! การแปลงเป็นการปรับเปลี่ยน ที่
เราสามารถทำได้บนเนื้อหา (รูปภาพ วิดีโอ ฯลฯ …) มีการแปลงมากมาย และหากคุณต้องการเรียนรู้มากกว่าตัวอย่างที่ฉันแสดงที่นี่ ฉันขอแนะนำให้ไปที่เอกสารประกอบของCloudinary
หากเราต้องการควบคุมการอัปโหลดของเรามากขึ้น เราสามารถใช้ฟังก์ชันเรียกกลับของเราได้:
MediaManager.get()
.upload(fileToUpload)
.unsigned(“sample_preset”)
.options(options)
.callback(new UploadCallback() {
@Override
public void onStart(String requestId) {
// Called when upload starts
}
@Override
public void onProgress(String requestId, long bytes, long totalBytes) {
// Called when progress is made
}
@Override
public void onSuccess(String requestId, Map resultData) {
// Called on success
}
@Override
public void onError(String requestId, ErrorInfo error) {
// Called on error
}
@Override
public void onReschedule(String requestId, ErrorInfo error) {
// Called when upload is rescheduled
}
}).dispatch();Signed Upload
onStart()- ทริกเกอร์เมื่อเริ่มการอัปโหลดonProgress()— ทริกเกอร์เมื่อเราได้รับความคืบหน้ามากขึ้นonSuccess()—ทริกเกอร์เมื่อการอัปโหลดเสร็จสิ้นonError()-ทริกเกอร์เมื่อเกิดข้อผิดพลาดonReschedule()—ทริกเกอร์เมื่อมีการกำหนดเวลาการอัปโหลดใหม่
การอัปโหลดที่ลงนามจำเป็นต้องมีลายเซ็น ลายเซ็นนี้สามารถสร้างได้โดยใช้ข้อมูลลับ Cloudinary API ของคุณแต่เนื่องจากเรากำลังทำงานในฝั่งไคลเอนต์ คุณไม่ควรเปิดเผยความลับ API ของคุณ (หรือข้อมูลที่ละเอียดอ่อนใดๆ) ภายในแอปพลิเคชันของคุณ แต่คุณควรสร้าง ลายเซ็นรับรองความถูกต้องบนเซิร์ฟเวอร์ของคุณ
เมื่อคุณเริ่มต้นMediaManagerวัตถุของคุณ คุณสามารถใช้SignatureProviderเมื่อใดก็ตามที่คุณพยายามอัปโหลดที่ลงชื่อ Android SDK จะเรียกใช้provideSignature()แต่คุณควรทำสิ่งต่อไปนี้ให้เสร็จสิ้นก่อน การเรียกกลับนี้จะเรียกใช้เธรดพื้นหลัง:
MediaManager.init(this, new SignatureProvider() {
@Override
public Signature provideSignature(Map options) {
// call server signature endpoint
}
}, null);
จะเกิดอะไรขึ้นหากเรามีไฟล์ขนาดใหญ่ (มากกว่า 100MB) เราจะอัปโหลดได้อย่างไร
ภายใน SDK เรามีตัวเลือกในการส่งไฟล์ขนาดใหญ่เป็นชิ้นๆ เราสามารถกำหนดขนาดก้อนได้ภายในการเรียกใช้ฟังก์ชัน:
cloudinary.uploader().uploadLarge(temp, ObjectUtils.asMap("upload_preset", "sample_preset","resource_type", "video", "chunk_size", 5243000))
มีบางสิ่งที่ควรสังเกตเมื่อใช้uploadLarge():
- ขนาดไฟล์ต้องมากกว่า 100MB
- ขนาดก้อนเริ่มต้นคือ 20MB
- ขนาดขั้นต่ำของขนาดก้อนสามารถเป็น 5MB
หนึ่งในกรณีการใช้งานเมื่ออัปโหลดอาจเป็นได้ว่าผู้ใช้ไม่ต้องการรอและย่อขนาดแอป (ย้ายไปที่แอปอื่น) เมื่อจัดการกับสถานการณ์นี้ (โดยปกติจะเป็นไฟล์ขนาดใหญ่) เราต้องการสร้างบริการที่ทำงานในพื้นหลังของแอปพลิเคชันของเรา ภายใน SDK เราสร้างบริการง่ายๆ ที่เรียกว่าListenerService
public class UploadListner extends ListnerService {
@Override
public void onStart(String requestId) {
// Called when upload starts.
}
@Override
public void onProgress(String requestId, long bytes, long totalBytes) {
// Called when upload makes progress.
}
@Override
public void onSuccess(String requestId, Map resultData) {
// Called when upload finishes successfully.
}
@Override
public void onError(String requestId, ErrorInfo error) {
// Called on error
}
@Override
public void onReschedule(String requestId, ErrorInfo error) {
// Called when upload is rescheduled.
}
}
<application
...
<service
android:name="com.myapp.UploadListner" />
<meta-data
android:name="cloudinaryCallbackService"
android:value="com.myapp.UploadListner" />
...
</application>
MediaManager.get().upload(fileToUpload).unsigned("sample_preset").callback(new UploadListener());
SDK ของ Cloudinary ทำให้การอัปโหลดเป็นกระบวนการที่ง่ายดายในการนำไปใช้ เรามีการอัปโหลดไม่กี่ประเภท:
- ไม่ได้ลงชื่อ — สำหรับการอัปโหลดพื้นฐาน
- Signed — เพื่อการอัพโหลดที่ปลอดภัยยิ่งขึ้น
- อัปโหลดขนาดใหญ่ — สำหรับไฟล์ขนาดใหญ่
- นอกจากนี้ เรายังสามารถลงทะเบียนบริการเป็นการโทรกลับได้ หากการอัปโหลดดำเนินการเมื่อแอปทำงานในพื้นหลัง





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)