Fitur callback unggahan memungkinkan server aplikasi Anda menerima permintaan POST dari OSS setiap kali klien seluler mengunggah objek. Dengan demikian, server Anda memperoleh visibilitas penuh terhadap setiap unggahan—termasuk identitas pengunggah, konten yang diunggah, dan perangkat asal—sehingga Anda dapat melacak, memproses, atau menyimpan data tersebut tanpa perlu melakukan polling ke OSS.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Menyelesaikan Menyiapkan transfer data langsung untuk aplikasi seluler — aplikasi Android atau iOS Anda harus sudah mengunggah langsung ke OSS menggunakan token Security Token Service (STS).
Memiliki server aplikasi dengan alamat IP publik yang dapat menerima permintaan POST.
Memiliki URL callback yang dapat diakses publik (misalnya,
http://example.com/callback.php).
Kasus penggunaan
Callback unggahan berguna ketika server Anda perlu merespons unggahan secara langsung:
Pelacakan konten yang dibuat pengguna: Mencatat pengguna yang mengunggah foto profil, dokumen, atau video, beserta nama file, ukuran, dan tipe MIME-nya.
Pengumpulan metadata perangkat: Menangkap versi aplikasi, versi sistem operasi, koordinat GPS, atau model perangkat bersamaan dengan setiap unggahan—tanpa memerlukan panggilan API terpisah dari klien.
Pemrosesan pasca-unggahan: Mememicu alur kerja lanjutan (pembaruan database, pemrosesan gambar, notifikasi) segera setelah unggahan tiba di OSS.
Cara kerja
Alur ini melibatkan tiga pihak: aplikasi seluler, OSS, dan server aplikasi Anda.
Langkah 1–4 (tidak ditampilkan secara rinci): Aplikasi seluler melakukan autentikasi dengan server aplikasi Anda dan mendapatkan token STS.
Langkah 5: Aplikasi Android atau iOS mengirim permintaan unggahan ke OSS. Permintaan tersebut mencakup
callbackUrldancallbackBody, yang memberi tahu OSS ke mana mengirim callback dan data apa yang harus disertakan.Langkah 6: Setelah menerima objek, OSS mengirim permintaan callback POST ke server aplikasi Anda di
callbackUrl.Langkah 7: Server aplikasi Anda memproses permintaan tersebut dan mengembalikan respons JSON. OSS meneruskan respons tersebut ke aplikasi seluler sebagai hasil unggahan.
Jika server aplikasi Anda gagal menerima permintaan callback atau tidak dapat diakses, OSS mengembalikan HTTP 203 ke aplikasi seluler. Objek tetap disimpan di OSS terlepas dari hal tersebut.
Untuk detail spesifikasi callback lengkap, lihat Callback.
Variabel sistem
Saat OSS mengirim permintaan callback ke server aplikasi Anda, callbackBody dapat mencakup kombinasi variabel sistem berikut. Anda menentukan variabel mana saja yang akan disertakan saat mengonfigurasi permintaan unggahan di aplikasi seluler.
| Variabel | Deskripsi |
|---|---|
bucket | Bucket tempat objek diunggah |
object | Nama objek (key) setelah diunggah |
etag | ETag dari objek yang diunggah |
size | Ukuran objek yang diunggah |
mimeType | Tipe MIME dari data yang diunggah |
imageInfo.height | Tinggi gambar yang diunggah |
imageInfo.width | Lebar gambar yang diunggah |
imageInfo.format | Format gambar yang diunggah (misalnya, JPG atau PNG) |
Mengonfigurasi callback unggahan di aplikasi seluler
Untuk memicu callback, sertakan callbackUrl dan callbackBody dalam setiap permintaan unggahan. Anda juga dapat mengirimkan variabel kustom—dengan awalan x:—untuk mengirim metadata sisi klien ke server Anda.
Parameter yang harus disertakan dalam setiap permintaan unggahan:
| Parameter | Deskripsi | Contoh |
|---|---|---|
callbackUrl | URL server aplikasi Anda yang menerima callback. Harus dapat diakses melalui Internet. | http://example.com/callback.php |
callbackBody | Variabel sistem (dan variabel kustom) yang disertakan OSS dalam badan permintaan callback. | filename=${object}&size=${size}&phone=${x:phone} |
Penamaan variabel kustom: Variabel kustom harus diawali dengan x: (misalnya, x:phone, x:system, x:gps, x:version). OSS meneruskan variabel ini ke server Anda dalam callbackBody.
iOS
OSSPutObjectRequest *request = [OSSPutObjectRequest new];
request.bucketName = @"<bucketName>";
request.objectKey = @"<objectKey>";
request.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
// Set the callback URL and the fields to send to your server.
request.callbackParam = @{
@"callbackUrl": @"http://example.com/callback.php",
@"callbackBody": @"filename=${object}&size=${size}&phone=${x:phone}&system=${x:system}"
};
// Set custom variable values.
request.callbackVar = @{
@"x:phone": @"iphone6s",
@"x:system": @"ios9.1"
};Android
PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("application/octet-stream");
put.setMetadata(metadata);
// Set the callback URL and the fields to send to your server.
put.setCallbackParam(new HashMap<String, String>() {{
put("callbackUrl", "http://example.com/callback.php");
put("callbackBody", "filename=${object}&size=${size}&phone=${x:phone}&system=${x:system}");
}});
// Set custom variable values.
put.setCallbackVars(new HashMap<String, String>() {{
put("x:phone", "iPhone 6s");
put("x:system", "YunOS5.0");
}});Persyaratan server aplikasi
Server aplikasi Anda harus:
Menerima permintaan POST di titik akhir
callbackUrl.Memiliki alamat IP publik agar OSS dapat mengaksesnya. Contoh:
http://example.com/callback.php.Mengembalikan respons JSON. OSS meneruskan respons ini langsung ke aplikasi seluler sebagai hasil unggahan. Anda dapat menyertakan bidang apa pun dalam badan JSON.
Verifikasi bahwa callback berasal dari OSS
Jika server Anda menghadap ke Internet, server tersebut mungkin menerima permintaan dari sumber selain OSS. Untuk memastikan bahwa callback tersebut asli, lakukan verifikasi tanda tangan RSA pada header x-oss-pub-key-url dan authorization dalam permintaan POST yang masuk. Hanya permintaan yang lolos verifikasi tanda tangan RSA yang berasal dari OSS.
Program contoh pada bagian berikutnya mencakup logika verifikasi RSA ini—gunakan sebagai referensi.
Contoh permintaan callback yang diterima server Anda (berdasarkan konfigurasi iOS dan Android di atas):
POST /index.html HTTP/1.0
Host: 203.0.113.0
Connection: close
Content-Length: 81
Content-Type: application/x-www-form-urlencoded
User-Agent: ehttp-client/0.0.1
authorization: kKQe**************/kdD1ktNVgbWE**************
x-oss-pub-key-url: aHR0**************
filename=test.txt&size=5&phone=iphone6s&system=ios9.1Setelah server Anda memverifikasi tanda tangan dan mengurai badan permintaan, server tersebut dapat menyimpan data yang diekstraksi (nama file, ukuran, model ponsel, versi sistem operasi) untuk manajemen berkelanjutan.
Cara OSS menangani respons server
| Skenario | Perilaku OSS |
|---|---|
| Server aplikasi gagal menerima permintaan atau tidak dapat diakses | OSS mengembalikan HTTP 203 ke aplikasi seluler. Objek tetap disimpan di OSS terlepas dari hal tersebut. |
| Server aplikasi mengembalikan respons JSON | OSS mengembalikan HTTP 200 dan badan respons JSON ke aplikasi seluler. |
Unduh program contoh
Program contoh berikut mengimplementasikan verifikasi tanda tangan RSA untuk server callback. Setiap program memvalidasi tanda tangan callback yang masuk tetapi tidak mengurai callbackBody—tambahkan logika penguraian tersebut sesuai dengan bidang yang Anda konfigurasikan dalam callbackBody.
Java
Unduh: AppCallbackServer.zip
Jalankan:
java -jar oss-callback-server-demo.jar 9000(9000 adalah port default; Anda dapat mengubah nomor port sesuai kebutuhan)> Catatan: File JAR memerlukan OSS SDK untuk Java 1.7. Jika terjadi error, rujuk kode sumber proyek Maven yang disertakan dan modifikasi sesuai kebutuhan.
PHP
Unduh: callback-php-demo.zip
Jalankan: Deploy ke lingkungan Apache. Lingkungan Apache diperlukan untuk mendapatkan header tertentu karena fitur khusus PHP—modifikasi kode contoh sesuai dengan lingkungan aktual Anda.
Python
Unduh: callback_app_server.py.zip
Jalankan:
python callback_app_server.py— ini akan menjalankan server HTTP minimal. Instal dependensi RSA jika diminta.
Ruby
Unduh: oss-callback-server (GitHub)
Jalankan:
ruby server.rb
FAQ
Dapatkah saya mengubah URL callback setelah permintaan unggahan ditandatangani?
Tidak. Parameter callback disertakan dalam permintaan unggahan yang telah ditandatangani dan diverifikasi oleh OSS. Mengubah callbackUrl atau parameter callback lainnya setelah penandatanganan menyebabkan verifikasi gagal—permintaan yang dimodifikasi tersebut akan ditolak.