Exclua um ou vários objetos de um bucket com versionamento ativado usando o OSS PHP SDK V1.
Pré-requisitos
Antes de começar, verifique se você tem:
Um bucket do OSS com versionamento ativado
A permissão
oss:DeleteObjectVersion. Para mais detalhes, consulte Anexar uma política personalizada a um usuário RAMAs variáveis de ambiente
OSS_ACCESS_KEY_IDeOSS_ACCESS_KEY_SECRETconfiguradas
Como funciona
A exclusão de um objeto em um bucket com versionamento comporta-se de maneira diferente dependendo da especificação do ID de versão.
Exclusão temporária (sem ID de versão especificado)
O OSS não exclui a versão atual do objeto. Em vez disso, insere um marcador de exclusão, que se torna a nova versão atual. Qualquer requisição GET subsequente retorna 404 Not Found, além do cabeçalho x-oss-delete-marker: true e do x-oss-version-id do novo marcador de exclusão.
Exclusão permanente (com ID de versão especificado)
O OSS exclui permanentemente a versão especificada. Passe o ID de versão usando a constante OssClient::OSS_VERSION_ID no array de opções. Para excluir uma versão cujo ID é a string "null", passe OssClient::OSS_VERSION_ID => "null" — o OSS trata a string "null" como o ID de versão e remove essa versão.
A exclusão permanente não pode ser desfeita. Após a exclusão de uma versão específica do objeto, não é possível recuperá-la.
Para excluir uma versão com o ID "null", defina o ID de versão como a string "null" na sua requisição. O OSS trata esse valor como um ID de versão literal, não como ausência de valor.
Excluir um único objeto
Ambos os exemplos usam $ossClient->deleteObject(). Todos os exemplos leem credenciais de variáveis de ambiente e usam a Signature Version 4.
Exclusão permanente
Exclua um objeto permanentemente especificando seu ID de versão:
<?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;
use OSS\CoreOssException;
// Load credentials from environment variables.
// Set OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET before running this code.
$provider = new EnvironmentVariableCredentialsProvider();
// Replace with your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<your-bucket-name>";
// Full object path, not including the bucket name. Example: example/test.txt
$object = "<your-object-name>";
$versionId = "<your-object-version-id>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// Permanently delete the specified object version.
$ossClient->deleteObject($bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId));
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK\n");
Exclusão temporária
Exclua temporariamente um objeto sem especificar um ID de versão. O OSS insere um marcador de exclusão e retorna seu ID de versão:
<?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;
use OSS\CoreOssException;
// Load credentials from environment variables.
// Set OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET before running this code.
$provider = new EnvironmentVariableCredentialsProvider();
// Replace with your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<your-bucket-name>";
$object = "<your-object-name>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// Soft-delete the object. OSS inserts a delete marker instead of removing the object.
$ret = $ossClient->deleteObject($bucket, $object);
print("delete marker: " . $ret['x-oss-delete-marker'] . "\n");
print("version ID: " . $ret['x-oss-version-id'] . "\n");
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK\n");
Para obter a especificação completa da API, consulte DeleteObject.
Excluir vários objetos
Ambos os exemplos usam $ossClient->deleteObjectVersions() com um array de instâncias DeleteObjectInfo. Cada instância corresponde a uma versão de objeto a ser excluída.
Exclusão permanente
Exclua permanentemente vários objetos especificando seus IDs de versão:
<?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;
use OSS\CoreOssException;
use OSS\Model\DeleteObjectInfo;
// Load credentials from environment variables.
// Set OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET before running this code.
$provider = new EnvironmentVariableCredentialsProvider();
// Replace with your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<your-bucket-name>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// Specify objects and their version IDs to permanently delete.
$objects = array();
$objects[] = new DeleteObjectInfo("<your-object1-name>", "<object1-version-id>");
$objects[] = new DeleteObjectInfo("<your-object2-name>", "<object2-version-id>");
$deletedObjectList = $ossClient->deleteObjectVersions($bucket, $objects);
// Print the deletion result.
if (!empty($deletedObjectList)) {
print("Deleted objects:\n");
foreach ($deletedObjectList as $deletedObjectInfo) {
print($deletedObjectInfo->getKey() . ", ");
print($deletedObjectInfo->getVersionId() . ", ");
print($deletedObjectInfo->getDeleteMarker() . ", ");
print($deletedObjectInfo->getDeleteMarkerVersionId() . "\n");
}
}
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK\n");
Exclusão temporária
Exclua temporariamente vários objetos sem especificar IDs de versão. O OSS insere um marcador de exclusão para cada objeto:
<?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;
use OSS\CoreOssException;
use OSS\Model\DeleteObjectInfo;
// Load credentials from environment variables.
// Set OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET before running this code.
$provider = new EnvironmentVariableCredentialsProvider();
// Replace with your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<your-bucket-name>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// Omit version IDs to soft-delete. OSS inserts a delete marker for each object.
$objects = array();
$objects[] = new DeleteObjectInfo("<your-object1-name>");
$objects[] = new DeleteObjectInfo("<your-object2-name>");
$deletedObjectList = $ossClient->deleteObjectVersions($bucket, $objects);
// Print the deletion result.
if (!empty($deletedObjectList)) {
print("Deleted objects:\n");
foreach ($deletedObjectList as $deletedObjectInfo) {
print($deletedObjectInfo->getKey() . ", ");
print($deletedObjectInfo->getVersionId() . ", ");
print($deletedObjectInfo->getDeleteMarker() . ", ");
print($deletedObjectInfo->getDeleteMarkerVersionId() . "\n");
}
}
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK\n");
Para obter a especificação completa da API, consulte DeleteMultipleObjects.
Observações de uso
Os exemplos usam o endpoint público da região China (Hangzhou) (
oss-cn-hangzhou.aliyuncs.com). Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use o endpoint interno. Para obter a lista completa de regiões e endpoints, consulte Regiões e endpoints.Para usar um domínio personalizado ou credenciais do Security Token Service (STS), consulte Crie um OssClient.