OSS menyediakan tiga metode untuk menerapkan Image Processing (IMG) pada objek gambar: melalui URL objek, SDK OSS, dan API OSS. Pilih metode yang paling sesuai dengan alur kerja Anda.
| Method | Best for |
|---|---|
| Object URLs | Berbagi cepat, pratinjau browser, atau pengiriman melalui CDN untuk gambar publik |
| OSS SDKs | Pemrosesan tingkat aplikasi — unduh gambar yang telah diproses secara langsung atau hasilkan signed URL untuk gambar privat |
| OSS API | Integrasi kustom tempat Anda membangun dan menandatangani permintaan sendiri |
Secara default, mengakses objek gambar melalui URL akan mengunduh file tersebut, bukan menampilkannya di browser. Untuk mengaktifkan pratinjau di browser, petakan nama domain kustom ke bucket Anda dan tambahkan rekaman CNAME. Untuk detailnya, lihat Map custom domain names.
Use object URLs
Tambahkan parameter IMG atau parameter gaya gambar langsung ke URL objek. Metode yang digunakan tergantung pada daftar kontrol akses (ACL) objek tersebut.
Public images (public read or public read/write)
Untuk objek dengan ACL public read atau public read/write, tambahkan parameter ke URL tanpa perlu penandatanganan.
URL formats:
| Mode | URL format |
|---|---|
| IMG parameters | https://bucketname.endpoint/objectname?x-oss-process=image/action,param_value |
| Image style | https://bucketname.endpoint/objectname?x-oss-process=style/stylename |
URL components:
| Component | Description |
|---|---|
https://bucketname.endpoint/objectname | URL lengkap objek tersebut. Lihat How do I get the URL of an uploaded object? |
x-oss-process=image/ | Awalan tetap yang menunjukkan bahwa parameter IMG mengikuti. |
action,param_value | Nama operasi dan parameternya. Rangkai beberapa operasi dengan /. OSS menerapkannya dari kiri ke kanan. |
x-oss-process=style/ | Awalan tetap yang menunjukkan bahwa gaya gambar mengikuti. |
stylename | Nama gaya yang dibuat di Konsol OSS. Lihat Create an image style. |
Processing order: OSS menerapkan operasi IMG sesuai urutan kemunculannya di URL. Misalnya, image/resize,w_200/rotate,90 pertama kali mengubah ukuran gambar menjadi lebar 200 piksel, lalu memutarnya 90 derajat.
Examples:
#include "oss_api.h"
#include "aos_http_io.h"
/* Tentukan titik akhir wilayah tempat bucket berada. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan jalur lengkap objek. Jangan sertakan nama bucket. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* Tentukan apakah akan menggunakan Nama Domain CNAME. 0 = tidak menggunakan Nama Domain CNAME. */
options->config->is_cname = 0;
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
aos_pool_t *pool;
aos_pool_create(&pool, NULL);
oss_request_options_t *oss_client_options;
oss_client_options = oss_request_options_create(pool);
init_options(oss_client_options);
aos_string_t bucket;
aos_string_t object;
aos_table_t *params = NULL;
aos_http_request_t *req;
char *url_str;
apr_time_t now;
int64_t expire_time;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
/* Ubah ukuran gambar menjadi 100 x 100 piksel. */
params = aos_table_make(pool, 1);
apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100");
req = aos_http_request_create(pool);
req->method = HTTP_GET;
req->query_params = params;
/* Tetapkan periode validitas menjadi 10 menit. */
now = apr_time_now();
expire_time = now / 1000000 + 10 * 60;
url_str = oss_gen_signed_url(oss_client_options, &bucket, &object, expire_time, req);
printf("url: %s\n", url_str);
aos_pool_destroy(pool);
aos_http_io_deinitialize();
return 0;
}Custom delimiter: Jika Anda mengonfigurasi pembatas kustom, pembatas tersebut akan menggantikan ?x-oss-process=style/ untuk menghasilkan URL yang lebih pendek. Misalnya, dengan ! sebagai pembatas: https://bucketname.endpoint/objectname!stylename. Konfigurasikan ini di bagian "Configure source image protection" pada Configure image styles.
Private images
Objek privat memerlukan signed URL — URL berbatas waktu yang menyematkan kredensial Anda dalam signature-nya. Tanpa signature yang valid, OSS akan mengembalikan kesalahan otorisasi.
Gunakan SDK OSS untuk menghasilkan signed URL dengan parameter IMG yang disematkan. Untuk bahasa lainnya, lihat Overview.
<details> <summary>Java</summary>
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import java.net.URL;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Throwable {
// Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap.
String objectName = "exampleobject.jpg";
// Buat instance OSSClient.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// Ubah ukuran gambar menjadi 100 x 100 piksel dan putar 90 derajat.
String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
// Atur masa berlaku signed URL selama 10 menit.
Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10);
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
req.setExpiration(expiration);
req.setProcess(style);
URL signedUrl = ossClient.generatePresignedUrl(req);
System.out.println(signedUrl);
} catch (OSSException oe) {
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}</details>
<details> <summary>Python</summary>
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir dan nama bucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
key = 'exampledir/example.jpg'
# Ubah ukuran gambar menjadi 100 x 100 piksel dan putar 90 derajat.
style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
# Hasilkan signed URL yang berlaku selama 600 detik.
url = bucket.sign_url('GET', key, 10 * 60, params={'x-oss-process': style})
print(url)</details>
<details> <summary>Go</summary>
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Tentukan titik akhir wilayah tempat bucket berada.
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
ossImageName := "exampledir/example.jpg"
// Hasilkan signed URL yang berlaku selama 600 detik dengan image/format,png diterapkan.
signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 600, oss.Process("image/format,png"))
if err != nil {
HandleError(err)
} else {
fmt.Println(signedURL)
}
}</details>
<details> <summary>Node.js</summary>
const OSS = require("ali-oss");
const client = new OSS({
// Tentukan wilayah tempat bucket berada. Contoh: oss-cn-hangzhou.
region: "oss-cn-hangzhou",
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// Tentukan nama bucket.
bucket: "examplebucket",
});
// Hasilkan signed URL yang berlaku selama 600 detik dengan image/resize,w_300 diterapkan.
const signUrl = client.signatureUrl("example.png", {
expires: 600,
process: "image/resize,w_300",
});
console.log("signUrl=" + signUrl);</details>
<details> <summary>PHP</summary>
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan titik akhir wilayah tempat bucket berada.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = "examplebucket";
// Tentukan path lengkap objek. Contoh: exampledir/exampleobject.jpg. Jangan sertakan nama bucket.
$object = "exampledir/exampleobject.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
// Hasilkan signed URL yang berlaku selama 3.600 detik yang mencakup parameter IMG.
// URL ini dapat digunakan langsung di browser untuk melihat gambar yang telah diproses.
$timeout = 3600;
$options = array(
// Ubah ukuran gambar menjadi 100 x 100 piksel.
OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100"
);
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print("Signed URL: \n" . $signedUrl);</details>
<details> <summary>C#</summary>
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket dan objek.
var bucketName = "examplebucket";
var objectName = "exampledir/exampledir.jpg";
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// Ubah ukuran gambar menjadi 100 x 100 piksel.
var process = "image/resize,m_fixed,w_100,h_100";
var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get)
{
Expiration = DateTime.Now.AddHours(1),
Process = process
};
var uri = client.GeneratePresignedUri(req);
Console.WriteLine("Generate Presigned Uri:{0} with process:{1} succeeded ", uri, process);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}</details>
<details> <summary>C++</summary>
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Tentukan titik akhir wilayah tempat bucket berada. */
std::string Endpoint = "yourEndpoint";
/* Tentukan nama bucket dan objek. */
std::string BucketName = "examplebucket";
std::string ObjectName = "exampledir/example.jpg";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* Hasilkan signed URL dengan parameter IMG. */
std::string Process = "image/resize,m_fixed,w_100,h_100";
GeneratePresignedUrlRequest request(BucketName, ObjectName, Http::Get);
request.setProcess(Process);
auto outcome = client.GeneratePresignedUrl(request);
if (outcome.isSuccess()) {
std::cout << "Generated presigned URL: " << outcome.result() << std::endl;
} else {
std::cout << "Failed to generate presigned URL. Error code: " << outcome.error().Code()
<< ", Message: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
/* Bebaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}</details>
<details> <summary>C</summary>
#include "oss_api.h"
#include "aos_http_io.h"
/* Tentukan titik akhir wilayah tempat bucket berada. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Jangan sertakan nama bucket. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
/* Tentukan apakah akan menggunakan CNAME. 0 = tidak menggunakan CNAME. */
options->config->is_cname = 0;
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
aos_pool_t *pool;
aos_pool_create(&pool, NULL);
oss_request_options_t *oss_client_options;
oss_client_options = oss_request_options_create(pool);
init_options(oss_client_options);
aos_string_t bucket;
aos_string_t object;
aos_table_t *params = NULL;
aos_http_request_t *req;
char *url_str;
apr_time_t now;
int64_t expire_time;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
/* Ubah ukuran gambar menjadi 100 x 100 piksel. */
params = aos_table_make(pool, 1);
apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100");
req = aos_http_request_create(pool);
req->method = HTTP_GET;
req->query_params = params;
/* Atur periode validitas selama 10 menit. */
now = apr_time_now();
expire_time = now / 1000000 + 10 * 60;
url_str = oss_gen_signed_url(oss_client_options, &bucket, &object, expire_time, req);
printf("url: %s\n", url_str);
aos_pool_destroy(pool);
aos_http_io_deinitialize();
return 0;
}</details>
Use OSS SDKs
SDK OSS memungkinkan Anda menerapkan parameter IMG atau gaya gambar untuk mengunduh gambar yang telah diproses langsung ke file. Setiap panggilan SDK menentukan string proses dengan cara yang sama seperti di URL, menggunakan / untuk merangkai beberapa operasi.
Apply IMG parameters
Atur opsi process ke string image/ dan panggil metode get-object SDK. OSS menerapkan operasi dari kiri ke kanan.
Untuk bahasa lainnya, lihat Overview.
<details> <summary>Java</summary>
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;
public class Demo {
public static void main(String[] args) throws Throwable {
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String bucketName = "examplebucket";
String objectName = "exampleobject.jpg";
// Tentukan path lokal untuk menyimpan gambar yang telah diproses.
String pathName = "D:\\localpath\\example-new.jpg";
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// Ubah ukuran gambar menjadi 100 x 100 piksel dan putar 90 derajat.
String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(style);
ossClient.getObject(request, new File("D:\\localpath\\example-new.jpg"));
} catch (OSSException oe) {
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}</details>
<details> <summary>Python</summary>
# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
key = 'exampledir/example.jpg'
new_pic = 'exampledir/newexample.jpg'
# Ubah ukuran gambar menjadi 100 x 100 piksel dan putar 90 derajat.
style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
bucket.get_object_to_file(key, new_pic, process=style)</details>
<details> <summary>Go</summary>
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
HandleError(err)
}
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
sourceImageName := "exampledir/example.jpg"
targetImageName := "exampledir/newexample.jpg"
// Ubah ukuran gambar menjadi 100 x 100 piksel dan putar 90 derajat.
style := "image/resize,m_fixed,w_100,h_100/rotate,90"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
}</details>
<details> <summary>Node.js</summary>
const OSS = require('ali-oss');
const client = new OSS({
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
bucket: 'yourbucketname'
});
// Ubah ukuran gambar menjadi 100 x 100 piksel.
async function scale() {
try {
const result = await client.get('example.jpg', './example-resize.jpg', { process: 'image/resize,m_fixed,w_100,h_100' });
} catch (e) {
console.log(e);
}
}
scale();
// Potong gambar menjadi 100 x 100 piksel mulai dari koordinat (100, 100).
async function cut() {
try {
const result = await client.get('example.jpg', './example-crop.jpg', { process: 'image/crop,w_100,h_100,x_100,y_100,r_1' });
} catch (e) {
console.log(e);
}
}
cut();
// Putar gambar 90 derajat.
async function rotate() {
try {
const result = await client.get('example.jpg', './example-rotate.jpg', { process: 'image/rotate,90' });
} catch (e) {
console.log(e);
}
}
rotate();
// Pertajam gambar dengan nilai 100.
async function sharpen() {
try {
const result = await client.get('example.jpg', './example-sharpen.jpg', { process: 'image/sharpen,100' });
} catch (e) {
console.log(e);
}
}
sharpen();
// Tambahkan Watermark.
async function watermark() {
try {
const result = await client.get('example.jpg', './example-watermark.jpg', { process: 'image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ' });
} catch (e) {
console.log(e);
}
}
watermark();
// Konversi format gambar.
async function format() {
try {
const result = await client.get('example.jpg', './example-format.jpg', { process: 'image/format,png' });
} catch (e) {
console.log(e);
}
}
format();
// Dapatkan metadata gambar.
async function info() {
try {
const result = await client.get('example.jpg', './example-info.txt', { process: 'image/info' });
} catch (e) {
console.log(e);
}
}
info();</details>
<details> <summary>PHP</summary>
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
$endpoint = "yourEndpoint";
$bucket = "examplebucket";
$object = "exampledir/exampleobject.jpg";
$download_file = "D:\\localpath\\example-new.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
// Ganti yourCustomStyleName dengan nama gaya gambar yang telah Anda buat di konsol OSS.
$style = "style/yourCustomStyleName";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => $style
);
$ossClient->getObject($bucket, $object, $options);</details>
<details> <summary>C++</summary>
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
std::string Endpoint = "yourEndpoint";
std::string BucketName = "examplebucket";
std::string ObjectName = "exampledir/example.jpg";
InitializeSdk();
ClientConfiguration conf;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* Ubah ukuran gambar menjadi 100 x 100 piksel dan putar 90 derajat. */
std::string Process = "image/resize,m_fixed,w_100,h_100/rotate,90";
GetObjectRequest request(BucketName, ObjectName);
request.setProcess(Process);
auto outcome = client.GetObject(request);
if (outcome.isSuccess()) {
std::cout << "Image processed successfully." << std::endl;
} else {
std::cout << "Failed to process image. Error code: " << outcome.error().Code()
<< ", Message: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
ShutdownSdk();
return 0;
}</details>
<details> <summary>C</summary>
#include "oss_api.h"
#include "aos_http_io.h"
const char *endpoint = "yourEndpoint";
const char *bucket_name = "examplebucket";
const char *object_name = "exampledir/exampleobject.txt";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
options->config->is_cname = 0;
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
aos_pool_t *pool;
aos_pool_create(&pool, NULL);
oss_request_options_t *oss_client_options;
oss_client_options = oss_request_options_create(pool);
init_options(oss_client_options);
aos_string_t bucket;
aos_string_t object;
aos_string_t file;
aos_table_t *headers = NULL;
aos_table_t *params = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
/* Ubah ukuran gambar menjadi 100 x 100 piksel dan putar 90 derajat. */
params = aos_table_make(pool, 1);
apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100/rotate,90");
aos_str_set(&file, "yourLocalFileName");
resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("get object to file succeeded\n");
} else {
printf("get object to file failed\n");
}
aos_pool_destroy(pool);
aos_http_io_deinitialize();
return 0;
}</details>
Apply image styles
Gaya gambar menggabungkan beberapa parameter IMG ke dalam satu preset bernama, sehingga memudahkan penerapan transformasi yang sama pada banyak gambar. Pendekatan ini memungkinkan Anda menggunakan kembali transformasi, memperpendek URL kompleks, dan menyembunyikan detail transformasi dari URL pengiriman. Buat gaya di Konsol OSS, lalu rujuk berdasarkan namanya dalam panggilan SDK.
Semua contoh menggunakan style/yourCustomStyleName sebagai string proses. Ganti yourCustomStyleName dengan nama gaya yang Anda buat di Konsol OSS.
Untuk bahasa lainnya, lihat Overview.
<details> <summary>Java</summary>
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;
public class Demo {
public static void main(String[] args) throws Throwable {
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String bucketName = "examplebucket";
String objectName = "exampleobject.jpg";
String pathName = "D:\\localpath\\example-new.jpg";
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// Ganti yourCustomStyleName dengan nama gaya gambar yang Anda buat di Konsol OSS.
String style = "style/yourCustomStyleName";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(style);
ossClient.getObject(request, new File(pathName));
} catch (OSSException oe) {
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}</details>
<details> <summary>Python</summary>
# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
key = 'exampledir/example.jpg'
new_pic = 'exampledir/newexample.jpg'
# Ganti yourCustomStyleName dengan nama gaya gambar yang Anda buat di Konsol OSS.
style = 'style/yourCustomStyleName'
bucket.get_object_to_file(key, new_pic, process=style)</details>
<details> <summary>Go</summary>
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
sourceImageName := "example/example.jpg"
targetImageName := "D:\\localpath\\newexample.jpg"
// Ganti yourCustomStyleName dengan nama gaya gambar yang telah Anda buat di konsol OSS.
style := "style/yourCustomStyleName"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
}</details>
<details> <summary>Node.js</summary>
const OSS = require('ali-oss');
const client = new OSS({
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
bucket: 'yourbucketname'
});
// Ubah ukuran gambar menjadi 100 x 100 piksel.
async function scale() {
try {
const result = await client.get('example.jpg', './example-resize.jpg', { process: 'image/resize,m_fixed,w_100,h_100' });
} catch (e) {
console.log(e);
}
}
scale();
// Potong gambar menjadi 100 x 100 piksel mulai dari koordinat (100, 100).
async function cut() {
try {
const result = await client.get('example.jpg', './example-crop.jpg', { process: 'image/crop,w_100,h_100,x_100,y_100,r_1'});
} catch (e) {
console.log(e);
}
}
cut();
// Putar gambar 90 derajat.
async function rotate() {
try {
const result = await client.get('example.jpg', './example-rotate.jpg', { process: 'image/rotate,90'});
} catch (e) {
console.log(e);
}
}
rotate();
// Pertajam gambar dengan nilai 100.
async function sharpen() {
try {
const result = await client.get('example.jpg', './example-sharpen.jpg', { process: 'image/sharpen,100'});
} catch (e) {
console.log(e);
}
}
sharpen();
// Tambahkan Watermark.
async function watermark() {
try {
const result = await client.get('example.jpg', './example-watermark.jpg', { process: 'image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ'});
} catch (e) {
console.log(e);
}
}
watermark();
// Konversi format gambar.
async function format() {
try {
const result = await client.get('example.jpg', './example-format.jpg', { process: 'image/format,png'});
} catch (e) {
console.log(e);
}
}
format();
// Dapatkan metadata gambar.
async function info() {
try {
const result = await client.get('example.jpg', './example-info.txt', {process: 'image/info'});
} catch (e) {
console.log(e);
}
}
info();</details>
<details> <summary>PHP</summary>
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
$endpoint = "yourEndpoint";
$bucket = "examplebucket";
$object = "exampledir/exampleobject.jpg";
$download_file = "D:\\localpath\\example-new.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
// Ganti yourCustomStyleName dengan nama gaya gambar yang Anda buat di Konsol OSS.
$style = "style/yourCustomStyleName";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => $style
);
$ossClient->getObject($bucket, $object, $options);</details>
<details> <summary>C++</summary>
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
std::string Endpoint = "yourEndpoint";
std::string BucketName = "examplebucket";
std::string ObjectName = "exampledir/example.jpg";
InitializeSdk();
ClientConfiguration conf;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/* Ganti yourCustomStyleName dengan nama gaya gambar yang Anda buat di Konsol OSS. */
std::string Process = "style/yourCustomStyleName";
GetObjectRequest request(BucketName, ObjectName);
request.setProcess(Process);
auto outcome = client.GetObject(request);
if (outcome.isSuccess()) {
std::cout << "Image processed successfully." << std::endl;
} else {
std::cout << "Failed to process image. Error code: " << outcome.error().Code()
<< ", Message: " << outcome.error().Message()
<< ", RequestId: " << outcome.error().RequestId() << std::endl;
}
ShutdownSdk();
return 0;
}</details>
<details> <summary>C</summary>
#include "oss_api.h"
#include "aos_http_io.h"
const char *endpoint = "yourEndpoint";
const char *bucket_name = "examplebucket";
const char *object_name = "exampledir/exampleobject.txt";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
options->config->is_cname = 0;
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
aos_pool_t *pool;
aos_pool_create(&pool, NULL);
oss_request_options_t *oss_client_options;
oss_client_options = oss_request_options_create(pool);
init_options(oss_client_options);
aos_string_t bucket;
aos_string_t object;
aos_string_t file;
aos_table_t *headers = NULL;
aos_table_t *params = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
/* Ganti yourCustomStyleName dengan nama gaya gambar yang Anda buat di Konsol OSS. */
params = aos_table_make(pool, 1);
apr_table_set(params, OSS_PROCESS, "style/yourCustomStyleName");
aos_str_set(&file, "yourLocalFileName");
resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("get object to file succeeded\n");
} else {
printf("get object to file failed\n");
}
aos_pool_destroy(pool);
aos_http_io_deinitialize();
return 0;
}</details>
Use the OSS API
Untuk integrasi kustom, tambahkan parameter IMG atau parameter gaya gambar langsung ke permintaan GetObject. Sertakan perhitungan signature dalam kode Anda. Untuk detailnya, lihat GetObject.
IMG parameters:
GET /oss.jpg?x-oss-process=image/resize,w_100 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6qrrqxo2oawuk53otf****:UNQDb7GapEgJkcde6OhZ9J****Image style:
GET /oss.jpg?x-oss-process=style/styleexample HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6qrrawuk53oqxo2otf****:UNapEgQDb7GJkcde6OhZ9J****Save processed images
Secara default, IMG tidak menyimpan gambar yang telah diproses. Tambahkan parameter saveas ke permintaan IMG untuk menyimpan hasilnya ke bucket tertentu. Untuk detailnya, lihat Save processed images.