Upload SDK membungkus OSS SDK untuk menyederhanakan proses unggah. Gunakan OSS SDK secara langsung jika Anda memerlukan kontrol lebih rinci atas proses unggah.
Dukungan SDK
OSS SDK mendukung Java, Python, Go, PHP, Node.js, Ruby, serta platform klien seperti iOS, Android, dan HarmonyOS. Untuk informasi selengkapnya, lihat Overview.
Alur Kerja
Unggah sisi server
Server aplikasi Anda menggunakan OSS SDK (Java, Python, PHP, dll.) untuk mengunggah file. Karena server merupakan lingkungan tepercaya, Anda dapat menggunakan pasangan AccessKey secara langsung. Server memanggil API ApsaraVideo VOD untuk memperoleh URL unggah dan kredensial, lalu mengunggah melalui OSS SDK.
Unggah sisi klien
Klien (browser web atau aplikasi seluler) mengunggah file melalui OSS SDK. Untuk menjaga keamanan pasangan AccessKey Anda, siapkan layanan otorisasi di server aplikasi Anda. Klien meminta URL unggah sementara dan kredensial dari layanan ini, lalu mengunggah langsung ke OSS.
Catatan:
Untuk langkah-langkah terperinci dan contoh kode tentang cara server aplikasi memperoleh URL unggah dan kredensial dari ApsaraVideo VOD, lihat Peroleh URL unggah dan kredensial.
Tanggapan mencakup URL unggah (
UploadAddress) dan kredensial (UploadAuth) yang dikodekan Base64, serta ID aset media. Dekode dan uraikan nilai-nilai ini untuk menginisialisasi OSS SDK.CatatanBidang
UploadAddressberisi informasi bucket OSS tujuan, dan bidangUploadAuthberisi detail otorisasi termasuk token STS. Lakukan dekode Base64 pada kedua bidang tersebut untuk menginisialisasi klien OSS SDK. Lihat Referensi: Dekode URL unggah dan kredensial.ApsaraVideo VOD secara otomatis membuat entri aset media dan mengembalikan ID aset media bersama kredensial unggah. Simpan ID ini—diperlukan untuk manajemen media, pemutaran, dan pemrosesan.
VideoIddikembalikan saat Anda memperoleh URL unggah dan kredensial untuk video.ImageIddikembalikan saat Anda memperoleh URL unggah dan kredensial untuk gambar.MediaIddikembalikan saat Anda memperoleh URL unggah dan kredensial untuk aset media pendukung.
Pasangan AccessKey adalah kredensial dari Akun Alibaba Cloud atau pengguna Resource Access Management (RAM), dan tidak spesifik untuk suatu layanan tertentu. ApsaraVideo VOD dan Object Storage Service (OSS) menggunakan pasangan AccessKey yang sama. Anda dapat menggunakan ID AccessKey dan Rahasia AccessKey yang sama untuk memanggil API semua Layanan Alibaba Cloud yang diaktifkan untuk akun Anda, seperti ApsaraVideo VOD dan OSS. Anda tidak perlu membuat pasangan AccessKey terpisah untuk setiap layanan.
Unduh demo
Kode sumber demo:
Integrasi pemrograman
Contoh Java berikut menunjukkan integrasi lengkap.
Prasyarat
-
ApsaraVideo VOD telah diaktifkan. Untuk informasi selengkapnya, lihat Aktifkan ApsaraVideo VOD.
-
Pengaturan sistem yang diperlukan untuk unggah, termasuk jalur penyimpanan di wilayah tertentu dan pengaturan callback, telah dikonfigurasi. Untuk informasi selengkapnya, lihat Kelola bucket penyimpanan dan Konfigurasi callback.
-
Pengguna RAM telah dibuat dan digunakan untuk mengakses ApsaraVideo VOD. Untuk mencegah risiko keamanan akibat kebocoran pasangan AccessKey akun Alibaba Cloud Anda, kami menyarankan agar Anda membuat pengguna RAM dan memberikan izin yang diperlukan untuk mengakses ApsaraVideo VOD kepada pengguna RAM tersebut. Kemudian, Anda dapat menggunakan pasangan AccessKey pengguna RAM untuk mengakses ApsaraVideo VOD. Untuk informasi selengkapnya, lihat Buat pengguna RAM dan berikan izin.
-
Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. Untuk informasi selengkapnya, lihat Konfigurasi variabel lingkungan di Linux, macOS, dan Windows.
Penting-
Pasangan AccessKey akun Alibaba Cloud memiliki izin atas semua operasi API. Gunakan pasangan AccessKey pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
-
Jangan hard-code ID AccessKey dan Rahasia AccessKey Anda dalam kode proyek. Jika bocor, semua resource dalam akun Anda akan dikompromikan.
-
-
Opsional. Buat role untuk pengguna RAM dan berikan izin yang diperlukan untuk mengakses ApsaraVideo VOD jika Anda ingin mengakses ApsaraVideo VOD menggunakan Security Token Service (STS). Untuk informasi selengkapnya, lihat Peroleh token STS.
Persyaratan lingkungan
Diperlukan Java 1.8 atau versi yang lebih baru.
Anda dapat menjalankan perintah
java -versiondi terminal untuk memeriksa versi Java.
Kode contoh
SDK V1.0
Langkah 1. Instal dependensi
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.16.32</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>Langkah 2. Unggah file
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSSClient;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;
import org.apache.commons.codec.binary.Base64;
import java.io.File;
/**
* deskripsi
*/
public class UploadDemo {
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
// Tentukan wilayah tempat layanan ApsaraVideo VOD diaktifkan. Misalnya, jika layanan diaktifkan di wilayah Tiongkok (Shanghai), atur nilainya menjadi cn-shanghai. Untuk informasi tentang wilayah lainnya, lihat Ikhtisar unggah media.
String regionId = "cn-shanghai";
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
public static CreateUploadVideoResponse createUploadVideo(DefaultAcsClient vodClient) throws ClientException {
CreateUploadVideoRequest request = new CreateUploadVideoRequest();
request.setFileName("vod_test.mp4");
request.setTitle("ini adalah judul");
//request.setDescription("ini adalah deskripsi");
//request.setTags("tag1,tag2");
// Contoh CoverURL: http://example.aliyundoc.com/test_cover_****.jpg
//request.setCoverURL("<your CoverURL>");
//request.setCateId(-1L);
//request.setTemplateGroupId("");
//request.setWorkflowId("");
//request.setStorageLocation("");
//request.setAppId("app-1000000");
// Atur periode timeout permintaan.
request.setSysReadTimeout(1000);
request.setSysConnectTimeout(1000);
return vodClient.getAcsResponse(request);
}
public static OSSClient initOssClient(JSONObject uploadAuth, JSONObject uploadAddress) {
String endpoint = uploadAddress.getString("Endpoint");
String accessKeyId = uploadAuth.getString("AccessKeyId");
String accessKeySecret = uploadAuth.getString("AccessKeySecret");
String securityToken = uploadAuth.getString("SecurityToken");
return new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);
}
public static void uploadLocalFile(OSSClient ossClient, JSONObject uploadAddress, String localFile) {
String bucketName = uploadAddress.getString("Bucket");
String objectName = uploadAddress.getString("FileName");
File file = new File(localFile);
ossClient.putObject(bucketName, objectName, file);
}
public static void main(String[] argv) {
// Pasangan AccessKey akun Alibaba Cloud memiliki izin atas semua API. Kami menyarankan agar Anda menggunakan AccessKey pengguna RAM untuk akses API atau O&M rutin.
// Jangan hard-code ID AccessKey dan rahasia AccessKey dalam kode proyek Anda. Jika tidak, pasangan AccessKey dapat bocor dan mengancam keamanan semua resource dalam akun Anda.
// Contoh ini menunjukkan cara menggunakan pasangan AccessKey yang diperoleh dari variabel lingkungan untuk menerapkan verifikasi identitas untuk akses API. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkunganALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
// ID AccessKey Anda.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
// Rahasia AccessKey Anda.
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Jalur lengkap file video lokal yang ingin Anda unggah ke ApsaraVideo VOD. Jalur harus mencakup ekstensi nama file.
String localFile = "/Users/yours/Video/testVideo.flv";
try {
// Inisialisasi klien ApsaraVideo VOD dan peroleh URL unggah serta kredensial.
DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
CreateUploadVideoResponse createUploadVideoResponse = createUploadVideo(vodClient);
// Jika operasi berhasil, VideoId, UploadAddress, dan UploadAuth dikembalikan.
String videoId = createUploadVideoResponse.getVideoId();
JSONObject uploadAuth = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAuth()));
JSONObject uploadAddress = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAddress()));
// Gunakan UploadAuth dan UploadAddress untuk menginisialisasi klien OSS.
OSSClient ossClient = initOssClient(uploadAuth, uploadAddress);
// Unggah file. Perhatikan bahwa unggah bersifat sinkron dan memblokir thread. Waktu yang dibutuhkan tergantung pada ukuran file dan bandwidth unggah.
uploadLocalFile(ossClient, uploadAddress, localFile);
System.out.println("Unggah file lokal berhasil, VideoId : " + videoId);
} catch (Exception e) {
System.out.println("Unggah file lokal gagal, PesanKesalahan : " + e.getLocalizedMessage());
}
}
private static String decodeBase64(String data) {
return new String(Base64.decodeBase64(data));
}
}
SDK V2.0
Langkah 1. Instal dependensi
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>vod20170321</artifactId>
<version>3.6.4</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.3.8</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-console</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-util</artifactId>
<version>0.2.23</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>credentials-java</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>Langkah 2. Unggah file
Kami menyarankan menggunakan metode konfigurasi kredensial yang lebih aman yang menghindari hard-coding pasangan AccessKey. Untuk detailnya, lihat Kelola kredensial.
package com.aliyun.sample;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyun.tea.*;
import com.alibaba.fastjson.JSONObject;
import java.io.File;
import org.apache.commons.codec.binary.Base64;
public class Sample {
/**
* deskripsi :
* <p>Inisialisasi klien menggunakan kredensial.</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.vod20170321.Client createClient() throws Exception {
com.aliyun.credentials.models.Config creditConfig = new com.aliyun.credentials.models.Config();
creditConfig.setType("access_key")
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client(creditConfig);
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setCredential(credential);
// Titik akhir layanan. Lihat https://api.alibabacloud.com/product/vod.
config.endpoint = "vod.cn-shanghai.aliyuncs.com";
return new com.aliyun.vod20170321.Client(config);
}
public static void main(String[] args_) throws Exception {
com.aliyun.vod20170321.Client client = Sample.createClient();
com.aliyun.vod20170321.models.CreateUploadVideoRequest createUploadVideoRequest = new com.aliyun.vod20170321.models.CreateUploadVideoRequest()
.setFileName("ecs.mp4")
.setTitle("ecs");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
com.aliyun.vod20170321.models.CreateUploadVideoResponse resp = client.createUploadVideoWithOptions(createUploadVideoRequest, runtime);
// Saat berhasil, tanggapan berisi VideoId, UploadAddress, dan UploadAuth.
String videoId = resp.getBody().videoId;
String localFile = "/Users/yours/ecs.mp4";
JSONObject uploadAuth = JSONObject.parseObject(decodeBase64(resp.getBody().uploadAuth));
JSONObject uploadAddress = JSONObject.parseObject(decodeBase64(resp.getBody().uploadAddress));
OSS ossClient = initOssClient(uploadAuth, uploadAddress);
uploadLocalFile(ossClient, uploadAddress, localFile);
System.out.println("Unggah file lokal berhasil, VideoId : " + videoId);
} catch (TeaException error) {
// Ini hanya untuk demonstrasi. Di lingkungan produksi, tangani exception dengan hati-hati dan jangan abaikan.
// Pesan kesalahan.
System.out.println(error.getMessage());
// Alamat diagnostik.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// Ini hanya untuk demonstrasi. Di lingkungan produksi, tangani exception dengan hati-hati dan jangan abaikan.
// Pesan kesalahan.
System.out.println(error.getMessage());
// Alamat diagnostik.
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
/**
* Inisialisasi klien OSS.
* @param uploadAuth
* @param uploadAddress
* @return
*/
public static OSS initOssClient(JSONObject uploadAuth, JSONObject uploadAddress) {
String endpoint = uploadAddress.getString("Endpoint");
String accessKeyId = uploadAuth.getString("AccessKeyId");
String accessKeySecret = uploadAuth.getString("AccessKeySecret");
String securityToken = uploadAuth.getString("SecurityToken");
com.aliyun.credentials.models.Config creditConfig = new com.aliyun.credentials.models.Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret)
.setSecurityToken(securityToken);
DefaultCredentialProvider credentialsProvider = new CredentialsProviderFactory()
.newDefaultCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V1);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(endpoint)
.build();
return ossClient;
}
/**
* Unggah file lokal
* @param ossClient
* @param uploadAddress
* @param localFile
* @throws Exception
*/
public static void uploadLocalFile(OSS ossClient, JSONObject uploadAddress, String localFile) throws Exception {
String bucketName = uploadAddress.getString("Bucket");
String objectName = uploadAddress.getString("FileName");
File file = new File(localFile);
PutObjectResult result = ossClient.putObject(bucketName, objectName, file);
com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(result));
}
/**
* Dekode UploadAuth/UploadAddress
* @param s
* @return
*/
public static String decodeBase64(String s) {
byte[] b = null;
String result = null;
if (s != null) {
Base64 decoder = new Base64();
try {
b = decoder.decode(s);
result = new String(b, "utf-8");
} catch (Exception e) {
}
}
return result;
}
}
Referensi: Dekode URL unggah dan kredensial
Lakukan dekode Base64 pada UploadAddress dan UploadAuth untuk memperoleh titik akhir OSS dan detail otorisasi guna menginisialisasi klien OSS:
import org.apache.commons.codec.binary.Base64;
public static String decodeBase64(String s) {
byte[] b = null;
String result = null;
if (s != null) {
Base64 decoder = new Base64();
try {
b = decoder.decode(s);
result = new String(b, "utf-8");
} catch (Exception e) {
}
}
return result;
}Tabel 1. Bidang UploadAddress yang didekode
Bidang | Deskripsi |
Bucket | Bucket penyimpanan VOD. |
Endpoint | Titik akhir wilayah penyimpanan. |
FileName | Nama file yang ditetapkan VOD untuk file yang diunggah. |
ObjectPrefix | Dikembalikan hanya saat mengunggah file M3U8. |
Tabel 2. Bidang UploadAuth yang didekode
Bidang | Deskripsi |
AccessKeyId | ID AccessKey sementara untuk unggah. |
AccessKeySecret | Rahasia AccessKey sementara untuk unggah. |
SecurityToken | Token keamanan STS untuk unggah. |
ExpireUTCTime | Waktu kedaluwarsa kredensial dalam UTC (yyyy-MM-ddTHH:mm:ssZ). |
Expiration | Periode validitas dalam detik. Untuk video, periode ini adalah 3000 detik. Segarkan kredensial setelah kedaluwarsa. |
Region | ID wilayah unggah. |