Lorsque vous téléchargez un fichier (objet), vous pouvez spécifier une ou plusieurs conditions. Le fichier n'est téléchargé que si les conditions spécifiées sont remplies. Si les conditions ne sont pas satisfaites, une erreur est renvoyée et le téléchargement ne démarre pas.
Notes d'utilisation
Lorsque vous utilisez des outils de regroupement tels que Webpack et Browserify, installez le SDK OSS pour Browser.js en exécutant la commande npm install ali-oss.
Si vous souhaitez accéder à un compartiment OSS depuis un navigateur sans avoir configuré de règles CORS pour ce compartiment, le navigateur rejette la requête. Par conséquent, vous devez configurer des règles CORS pour le compartiment afin d'y accéder depuis un navigateur. Pour plus d'informations, consultez la section Installation.
-
Le SDK OSS pour Browser.js est généralement utilisé dans les navigateurs. Afin d'éviter l'exposition de votre paire de clés AccessKey, nous vous recommandons d'utiliser des identifiants d'accès temporaires obtenus via le Security Token Service (STS) pour accéder à OSS.
Les identifiants d'accès temporaires se composent d'une paire de clés AccessKey et d'un jeton de sécurité. La paire de clés AccessKey comprend un AccessKey ID et un AccessKey Secret. Pour savoir comment obtenir des identifiants d'accès temporaires, consultez la section Utilisation du STS pour l'autorisation d'accès temporaire.
Exemple de code
Le code suivant illustre un téléchargement conditionnel :
<!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>
Références
Pour consulter l'exemple de code complet relatif aux téléchargements conditionnels, rendez-vous sur la page GitHub example.
Pour plus d'informations sur l'opération API, consultez la section GetObject.