Ao baixar um arquivo (objeto), especifique uma ou mais condições. O download ocorre apenas se as condições definidas forem atendidas. Caso contrário, o sistema retorna um erro e o download não é iniciado.
Observações de uso
Para usar ferramentas de empacotamento como Webpack e Browserify, instale o OSS SDK for Browser.js executando o comando npm install ali-oss.
Se você tentar acessar um bucket do OSS pelo navegador sem regras de CORS configuradas, o navegador rejeitará a solicitação. Portanto, configure regras de CORS no bucket para permitir o acesso via navegador. Para mais informações, consulte Instalação.
-
O OSS SDK for Browser.js é usado principalmente em navegadores. Para evitar a exposição do seu par de AccessKey, use credenciais de acesso temporárias obtidas por meio do Security Token Service (STS) para acessar o OSS.
Essas credenciais temporárias consistem em um par de AccessKey e um token de segurança. O par de AccessKey inclui um AccessKey ID e um AccessKey secret. Para saber como obter credenciais de acesso temporárias, consulte Usar STS para autorização de acesso temporário.
Código de exemplo
O código a seguir apresenta um exemplo de download condicional:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<button id='upload'>Upload</button>
<button id='download'>Download</button>
<!--Import the SDK file.-->
<script type="text/javascript" src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.16.0.min.js"></script>
<script type="text/javascript">
const client = new OSS({
// Set region to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set region to oss-cn-hangzhou.
region: 'yourRegion',
authorizationV4: true,
// The temporary AccessKey ID and AccessKey secret obtained from Security Token Service (STS).
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// The SecurityToken obtained from STS.
stsToken: 'yourSecurityToken',
// Specify the bucket name. For example, examplebucket.
bucket: "examplebucket",
});
const download = document.getElementById('download')
const upload = document.getElementById('upload')
// Upload the file.
upload.addEventListener('click', () => {
// Specify the content of the file to upload.
const file = new Blob(['examplecontent'])
// Specify the full path of the file to upload. For example, exampledir/exampleobject.txt.
const fileName = 'exampledir/exampleobject.txt'
const result = client.put(fileName, file).then(r => console.log(r))
})
// Download the file.
download.addEventListener('click', () => {
// Specify the byte range to download.
const start = 1, end = 5
client.get('exampledir/exampleobject.txt', {
headers: {
// Specify a time in the If-Modified-Since request header. The file is downloaded if the specified time is earlier than the actual modification time of the file. If the specified time is the same as or later than the actual modification time, 304 Not Modified is returned.
"If-Modified-Since": new Date("1970-01-01").toGMTString()
// Specify a time in the If-Unmodified-Since request header. The file is downloaded if the specified time is the same as or later than the actual modification time of the file. If the specified time is earlier than the actual modification time, 412 Precondition Failed is returned.
//"If-Unmodified-Since": new Date(1970-01-01).toGMTString()
// Specify an ETag in the If-Match request header. The file is downloaded if the specified ETag matches the ETag of the file. If the specified ETag does not match, 412 Precondition Failed is returned.
//"If-Match": '5B3C1A2E0563E1B002CC607C****'
// Specify an ETag in the If-None-Match request header. The file is downloaded if the specified ETag does not match the ETag of the file. If the specified ETag matches, 304 Not Modified is returned.
//"If-None-Match": '5B3C1A2E0563E1B002CC607C****'
},
}).then(r => {
if (r.content.length > 0) {
const newBlob = new Blob([r.content], { type: r.res.headers['content-type'] });
const link = document.createElement('a')
link.href = window.URL.createObjectURL(newBlob)
link.download = 'foo.txt'
link.click()
window.URL.revokeObjectURL(link.href)
} else {
console.log('Error code', r.res.status)
console.log('No items to download that meet the conditions')
}
})
})
</script>
</body>
</html>
Referências
Para ver o código de exemplo completo sobre downloads condicionais, acesse o exemplo no GitHub.
Para obter mais informações sobre a operação da API, consulte GetObject.